gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:14:17 24 4
gpt4 key购买 nike

我试图理解 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]

我检查了下一个问题:

why is python reusing a class instance inside in function

还有很多 Python 引用,但我无法理解发生了什么。我认为与newIntContainer 标识符重用有关,但我理解不深。

为什么 Python 似乎重用了新对象的最后一个引用,即使我已将它添加到永久列表中也是如此?我该怎么做才能解决此问题?

谢谢;)

最佳答案

由于您将 listOfInts 设为 class 变量,因此 self.listOfInts 正在访问的内容,无论 self 实例可能是;因此,所有 append 都将添加到 same 列表。

如果这不是您想要的,您需要使 listOfInts 成为一个实例 变量,例如通过分配 self.listOfInts = []__init__ 方法的开头。

关于python - 为什么这个 Python 类要复制另一个类的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2684265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com