2014-12-05 58 views
0
class a: 
    b = [] 

c = a() 
d = a() 
print(c.b, d.b) # output: [] [] 
c.b.append(1) 
print(c.b, d.b) # expected: [1] [] 
       # output: [1] [1] 

这里究竟发生了什么?我试图开发一个应用程序,正如你可能猜到的,这件事情让它变得有点困难。是否有多个类实例共享此列表?

我想知道Python认为它在这里做什么,我应该做什么不同。

如果相关,我的Python版本是

的Python 3.4.2(v3.4.2:ab2c023a9432,2014年10月6日,22时15分05秒)[MSC v.1600 32位(英特尔)]上win32

回答

2

b变量在顶层分配了类,所以它是一个类变量。这意味着无论您通过哪个实例访问它(或者如果直接通过该类访问它,如a.b),您总是会看到相同的列表对象。

如果你想在每一种情况下一个单独的列表,在一个__init__方法创建与分配的self属性变量:

class a: 
    def __init__(self): 
     self.b = [] 
相关问题