gpt4 book ai didi

Python:为什么这个列表列表包含引用而不是副本?

转载 作者:太空宇宙 更新时间:2023-11-03 17:48:01 26 4
gpt4 key购买 nike

我有以下 python2 程序:

A=[]
for i in range(2):
A.append(list(["hello"]))
print "A is",A

F=[]
for i in range(2):
F.append(list(A))

print "F[0] is", F[0]
print "F[1] is", F[1]

F[0][0].append("goodbye")

print "F[0][0] is", F[0][0]
print "F[1][0] is", F[1][0]

当我运行它时,我得到输出:

A is [['hello'], ['hello']]
F[0] is [['hello'], ['hello']]
F[1] is [['hello'], ['hello']]
F[0][0] is ['hello', 'goodbye']
F[1][0] is ['hello', 'goodbye']

我期待 F[1][0] 的内容只是['hello'] 。我认为如果我写了,程序当前的行为将是正常的 F.append(A)而不是F.append(list(A)) 。但是,通过写list(A)而不仅仅是A我应该传递列表 A按值,而不是按引用。

我在这里误解了什么?

<小时/>

编辑:如果我写F.append(A[:]),程序具有相同的行为而不是F.append(list(A))

最佳答案

list(a) 和 a[:] 对可变对象的集合有限制,因为内部对象保持其引用完整。您应该使用 deepcopy在这种情况下。

特别是,它应该是 F.append(copy.deepcopy(A)) 而不是 F.append(list(A))

关于Python:为什么这个列表列表包含引用而不是副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29502988/

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