从我以前的python oop知识中我知道python为所有类实例都有一个类变量的单个副本;它意味着:
>>> class A: foo = []
>>> a, b = A(), A()
>>> a.foo.append(5)
>>> b.foo
[5]
但是当我这样做时:
>>> class A():
cl_var=5
def __init__(self,b):
self.obj_var=b
>>> a1,a2=A(2),A(5)
>>> a1.cl_var
5
>>> a1.cl_var=23
>>> a2.cl_var
5
为什么a2.cl_var没有变为23?
答案 0 :(得分:4)
当您分配到a1.cl_var
时,您重新绑定 cl_var
与a1
相关联。这不会影响a2.cl_var
。
>>> id(a1.cl_var), id(a2.cl_var)
(11395416, 11395416)
如您所见,a1.cl_var
和a2.cl_var
是同一个对象。
但是,当您分配到a1.cl_var
时,它们会变成不同的对象:
>>> a1.cl_var=23
>>> id(a1.cl_var), id(a2.cl_var)
(11395200, 11395416)
这不会发生在a
/ b
示例中,因为您通过引用修改 foo
。你没有重新绑定(即分配给它)。