1

from my past knowledge of python oop i know that python has a single copy of a class variable for all class instances;it means:

>>> class A: foo = []
>>> a, b = A(), A()
>>> a.foo.append(5)
>>> b.foo
[5]

but when i do this:

>>> 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 

why a2.cl_var not changing to 23 ?

4

1 回答 1

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您不会重新绑定(即分配给)它。

于 2013-09-08T10:22:51.423 回答