Python类中的列表在2个不同的实例上共享同一个对象?

zfr*_*cus 7 python

我创建了一个类:

class A:
    aList = []
Run Code Online (Sandbox Code Playgroud)

现在我有实例化这个类的函数,并将项添加到aList中.

注意:有2个项目

for item in items:
    a = A();
    a.aList.append(item);
Run Code Online (Sandbox Code Playgroud)

我发现第一个A和第二个A对象在其aList中具有相同数量的项目.我希望第一个A对象将在其列表中具有第一个项目,第二个A对象将在其aList中具有第二个项目.

有谁能解释这是怎么发生的?

PS:

我设法通过在构造函数中移动aList来解决这个问题:

def __init__(self):
    self.aList = [];
Run Code Online (Sandbox Code Playgroud)

但我仍然对这种行为感到好奇

joa*_*uin 11

您已将列表定义为类属性.

类属性由类的所有实例共享.当您在__init__as中定义列表时self.aList,列表是您的实例的属性(self),然后一切都按预期工作.