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)  #['壹贰叁']
阅读 4.1k
2 个回答

个人觉得说是“引用”与“值”的区别是不准确的。首先你确实需要先搞清楚python的可变对象和不可变对象的区别。
但是这里的实际情况更复杂一些,你可以试下print:

print(t1.__dict__, test_.__dict__)
print(t1.n, t1.__class__.n)

如果想要彻底搞清楚这些,你去搜下python对象查找属性的具体顺序。

“引用”与“值”的区别。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题