python 类变量是列表或字典的时候被所有实例共享吗?反之不共享?这是python的特性吗?
本文介绍了python 类变量是列表或字典的时候被所有实例共享吗?反之不共享?这是python的特性吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
如下:n和n_list是两个不同类型的类变量,在被某个实例修改后,却出现两种不同的结果。这块有点蒙圈儿了。。
# -*- coding:utf-8 -*-
class test_():
n = '123'
n_list = ['123']
def __init__(self, name, age):
self.name = name
self.age = age
t1 = test_('aaa', 'bbb')
t2 = test_('111', '222')
t1.n = '一二三'
print(t1.n) #一二三
print(t2.n) #123
print(test_.n) #123
t1.n_list[0] = '壹贰叁'
print(t1.n_list) #['壹贰叁']
print(t2.n_list) #['壹贰叁']
print(test_.n_list) #['壹贰叁']
解决方案
个人觉得说是引用与值的区别是不准确的。首先你确实需要先搞清楚python的可变对象和不可变对象的区别。
但是这里的实际情况更复杂一些,你可以试下print:
print(t1.__dict__, test_.__dict__)
print(t1.n, t1.__class__.n)
如果想要彻底搞清楚这些,你去搜下python对象查找属性的具体顺序。
这篇关于python 类变量是列表或字典的时候被所有实例共享吗?反之不共享?这是python的特性吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文