我正在尝试修改一个列表,由于我的修改变得有点棘手并且我的列表很大,所以我使用以下代码获取了列表的一部分
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 匹配。
请不要建议更好的编码方法 - 在我了解复制的工作原理之后,我将自己弄清楚如何在列表理解中执行此操作
根据Kai的回答,正确的方法是:
import copy
tempList=copy.deepcopy(origList[0:10])
id(origList[0])
>>>>42980096
id(tempList[0])
>>>>42714136
奇迹般有效