python中的类变量与实例变量

时间:2013-09-08 10:18:21

标签: python oop python-2.7

从我以前的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?

1 个答案:

答案 0 :(得分:4)

当您分配到a1.cl_var时,您重新绑定 cl_vara1相关联。这不会影响a2.cl_var

>>> id(a1.cl_var), id(a2.cl_var)
(11395416, 11395416)

如您所见,a1.cl_vara2.cl_var是同一个对象。

但是,当您分配到a1.cl_var时,它们会变成不同的对象:

>>> a1.cl_var=23
>>> id(a1.cl_var), id(a2.cl_var)
(11395200, 11395416)

这不会发生在a / b示例中,因为您通过引用修改 foo。你没有重新绑定(即分配给它)。