在Python中如何避免实例直接共享数据


如何避免在实例之间共享类数据?

我想要的是这种行为:

class a:
    list = []

x = a()
y = a()

x.list.append(1)
y.list.append(2)
x.list.append(3)
y.list.append(4)

print(x.list) # prints [1, 3]
print(y.list) # prints [2, 4]

当然,我打印时真正发生的是:

print(x.list) # prints [1, 2, 3, 4]
print(y.list) # prints [1, 2, 3, 4]

显然,他们正在类分享数据a。如何获得单独的实例来实现我想要的行为?

你可以这样

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

声明类声明中的变量使它们成为“类”成员而不是实例成员。在__init__方法中声明它们可确保在对象的每个新实例旁边创建成员的新实例,这是您正在寻找的行为。