为什么这个Python类要复制另一个类的内容?
我试图理解Python中的一种疏远行为 我有下一个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
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都有类(静态)字段。