如果切片不创建列表副本也不创建list()如何获得列表的真实副本?

PyN*_*bie 10 python copy list

我正在尝试修改列表,因为我的修改有点棘手,我的列表很大,我使用以下代码获取了我的列表的一部分

tempList=origList[0:10]
for item in tempList:
    item[-1].insert(0 , item[1])
    del item[1]
Run Code Online (Sandbox Code Playgroud)

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

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

所以我用Google搜索了一下,我找到了一些参考文献,说采取切片复制列表并创建一个新的.我还找到了帮助我找到项目ID的代码,所以我从头开始创建了我的origList,获得了前十项的ID.我再次对列表进行切片,发现切片中的id与origList的前十项中的id匹配.

我发现了更多的笔记,建议使用更复杂的方式来复制列表

tempList=list(origList([0:10])
Run Code Online (Sandbox Code Playgroud)

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

请不要建议更好的方法来进行编码 - 我将在列表中了解如何在我了解复制如何工作后自己理解

根据Kai的回答,正确的方法是:

import copy
tempList=copy.deepcopy(origList[0:10])
id(origList[0])
>>>>42980096
id(tempList[0])
>>>>42714136
Run Code Online (Sandbox Code Playgroud)

奇迹般有效

Kai*_*Kai 24

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

您的解决方案在于使用深层副本.Python为这种事情提供了一个复制模块.当您搜索它时,您将找到有关浅层和深层复制的更多信息.