【发布时间】:2021-08-25 21:52:01
【问题描述】:
我制作了一份清单,然后复制了一份。我尝试在每个元素的元素中插入不同的值。
list1 = [
[0, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 1],
[1, 0, 0],
[1, 0, 1],
[1, 1, 0],
[1, 1, 1]
]
list2 = list1.copy()
for i in range(8):
list1[i].insert(0, 0)
list2[i].insert(0, 1)
但结果是两个列表都受到两个插入的影响。我知道它们是不同的对象,因为我使用 id(list1) 和 id(list2) 打印了它们的 ID,所以我不明白为什么会这样。
任何帮助都会很有用。
提前谢谢你。
【问题讨论】:
-
因为两个列表包含相同的列表。您从未复制列表inside 列表。你想要
list2 = [sublist.copy() for sublist in list1] -
@juanpa.arrivillaga
deepcopy呢? -
@PeterWood 我个人不是粉丝,因为它太慢了,但它是一个非常有效的解决方案。虽然存在细微差别,
x = []; y = [x, x]; z = copy.deepcopy(y); z[0].append('foo')仍会导致[['foo'], ['foo']],而上述不会... -
@juanpa.arrivillaga 我必须承认我不相信
deepcopy用于一般用途,但在这种情况下,结果会是什么很清楚。 -
@PeterWood 查看我的编辑以了解细微差别。再说一次,这可能很愚蠢,但我只是不喜欢它做了多少额外的工作。