gpt4 book ai didi

python - 如果切片没有创建列表的副本,list() 也没有,我如何才能获得列表的真实副本?

转载 作者:太空狗 更新时间:2023-10-29 18:15:28 25 4
gpt4 key购买 nike

我正在尝试修改一个列表,由于我的修改变得有点棘手而且我的列表很大,所以我使用以下代码从我的列表中截取了一部分

tempList=origList[0:10]
for item in tempList:
item[-1].insert(0 , item[1])
del item[1]

我这样做是因为我认为对列表的所有修改都会影响 tempList 对象而不是 origList 对象。

好吧,一旦我的代码正确并在我的原始列表上运行它,前十项(索引 0-9)就会受到我在测试上面打印的代码时的操作的影响。

所以我在谷歌上搜索了一下,我找到了一些引用资料,说采取切片复制列表并创建一个新的。我还找到了帮助我找到项目 ID 的代码,所以我从头开始创建了我的 origList,得到了前十个项目的 ID。我再次对列表进行切片,发现切片中的 ID 与 origList 的前十项中的 ID 匹配。

我发现更多的注释建议使用一种更 pythonic 的方式来复制列表

tempList=list(origList([0:10])

我试过了,我仍然发现 tempList 中的 ID 与 origList 中的 ID 匹配。

请不要提出更好的编码方法——在我了解复制的工作原理后,我将在列表中自己理解如何做到这一点

根据凯的回答正确的方法是:

import copy
tempList=copy.deepcopy(origList[0:10])
id(origList[0])
>>>>42980096
id(tempList[0])
>>>>42714136

像魅力一样工作

最佳答案

切片创建一个浅拷贝。在您的示例中,我看到您正在对 item[-1] 调用 insert(),这意味着该项目是列表的列表。这意味着您的浅拷贝仍然引用原始对象。您可以将其视为制作指针的副本,而不是实际对象。

您的解决方案在于改用深拷贝。 Python 提供了一个 copy module就是为了这种事。搜索时,您会找到更多关于浅复制和深复制的信息。

关于python - 如果切片没有创建列表的副本,list() 也没有,我如何才能获得列表的真实副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/948032/

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