为什么这个Python类要复制另一个类的内容?

为什么这个Python类要复制另一个类的内容?,python,class,variables,Python,Class,Variables,我试图理解Python中的一种疏远行为 我有下一个python代码: class IntContainer: listOfInts = [] def __init__(self, initListOfInts): for i in initListOfInts: self.listOfInts.append(i) def printInts(self): print self.listOfInts if

我试图理解Python中的一种疏远行为

我有下一个python代码:

class IntContainer:

    listOfInts = []

    def __init__(self, initListOfInts):

        for i in initListOfInts:
            self.listOfInts.append(i)

    def printInts(self):

        print self.listOfInts

if __name__ == "__main__":

    intsGroup1 = [1,2,3,4]
    intsGroup2 = [4,5,6,7]

    intsGroups = [intsGroup1,intsGroup2]

    intsContainers = []

    for ig in intsGroups:
        newIntContainer = IntContainer(ig)
        intsContainers.append(newIntContainer)

    for ic in intsContainers:
        print ic.listOfInts
我希望得到如下结果:

[1, 2, 3, 4]
[4, 5, 6, 7]
但我得到:

[1, 2, 3, 4, 4, 5, 6, 7]
[1, 2, 3, 4, 4, 5, 6, 7]
我要检查下一个问题:

还有很多Python参考资料,但我不明白发生了什么。我认为这与
newIntContainer
标识符的重用有关,但我不太了解它

为什么Python似乎重用了新对象的最后一个引用,即使我已将其添加到永久列表中?如何解决此行为


谢谢;)

由于您将
listOfInts
作为一个类变量,这就是
self.listOfInts
正在访问的内容,无论它是什么
self
实例;因此,所有的
append
s都将进入相同的列表


如果这不是您想要的,您需要将
listOfInts
作为一个实例变量,例如,通过在
\uuuu init\uuu
方法的开头分配
self.listOfInts=[]

listOfInts已被定义为类变量

类变量由类的所有实例共享

如果要保存与类相关的状态,此行为非常有用(典型的示例是当您想知道所创建类的实例数时)


<>如果您希望ListFoints对每个实例都是唯一的,那么您应该在<强> init < /St>或其他类方法中定义为Soad。ListFoints

谢谢。我来自C++、PHP等,在那里您没有类共享变量(类变量)之类的东西…我只是认为我在定义一个规则对象参数。(实例变量)…实际上,C++和PHP都有类(静态)字段。