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上
答案 0 :(得分:2)
b
变量在类的顶层分配,因此它是一个类变量。这意味着无论您通过哪个实例访问它,您总是会看到相同的列表对象(或者如果您通过类直接访问它,则为a.b
)。
如果您想在每个实例中使用单独的列表,请使用self
方法创建一个具有__init__
属性分配的变量:
class a:
def __init__(self):
self.b = []