[英]Why is this Python class copying another class contents?
我试图理解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
成为一个实例变量,例如在__init__
方法的开头指定self.listOfInts = []
。
listOfInts已被定义为类变量。
类变量由类的所有实例共享。
如果要保存与类相关的状态,则此行为很有用(一个典型示例是当您想知道创建的类的实例数时。
如果您希望listOfInts对于每个实例都是唯一的,那么您应该在init或该类的其他方法中将其定义为self.listOfInts
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.