多个类实例是否共享此列表?

时间:2014-12-05 18:04:31

标签: python list python-3.x dictionary

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上

1 个答案:

答案 0 :(得分:2)

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

如果您想在每个实例中使用单独的列表,请使用self方法创建一个具有__init__属性分配的变量:

class a:
    def __init__(self):
        self.b = []