gpt4 book ai didi

python - 为什么此代码会更改两个列表(id 不相同)?

转载 作者:太空宇宙 更新时间:2023-11-04 10:22:59 26 4
gpt4 key购买 nike

我有这些列表:

l1 = [['a2', 1], ['a2', 2], ['a2', 3], ['a2', 4], ['a2', 5]]
membership = [0, 1, 1, 2, 3]

我愿意:

l2 = l1[:]
[item.append(membership[i]) for i, item in enumerate(l2)]

但是两个列表现在看起来像:

[['a2', 1, 0], ['a2', 2, 1], ['a2', 3, 1], ['a2', 4, 2], ['a2', 5, 3]]

我以为 l1[:] 返回一个副本? l2 = list(l1)

的行为相同
id(l2) == id(l1)

返回

False

最佳答案

l1[:] 只是创建一个 l1 的浅拷贝,它不适用于嵌套列表。对于嵌套列表,您需要 copy.deepcopy

>>> import copy
>>> l1 = [['a2', 1], ['a2', 2], ['a2', 3], ['a2', 4], ['a2', 5]]
>>> membership = [0, 1, 1, 2, 3]
>>> l2=copy.deepcopy(l1)
>>> [item.append(membership[i]) for i, item in enumerate(l2)]
[None, None, None, None, None]
>>> l1
[['a2', 1], ['a2', 2], ['a2', 3], ['a2', 4], ['a2', 5]]
>>> l2
[['a2', 1, 0], ['a2', 2, 1], ['a2', 3, 1], ['a2', 4, 2], ['a2', 5, 3]]
>>>

注意:在列表理解中更改列表不是正确的方法。而是使用普通的 for 循环。

for i, item in enumerate(l2):
item.append(membership[i])

关于python - 为什么此代码会更改两个列表(id 不相同)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31183013/

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