我试图修改一个列表,由于我的修改变得有点棘手,我的列表很大,我用下面的代码从列表中取了一部分
tempList=origList[0:10]
for item in tempList:
item[-1].insert(0 , item[1])
del item[1]
我这样做是因为对列表的所有修改都会影响tempList对象,而不是origList对象。在
好吧,一旦我把我的代码正确地运行在我的原始列表中,前十项(索引为0-9)就受到了我在测试上面打印的代码时所做的操作的影响。在
我在google上找到了一个新的参考文献,然后我在google上找到了一个新的参考文献。我还找到了帮助我找到项目id的代码,所以我从头开始创建了origList,得到了前10个项目的id。我再次将列表切片,发现切片中的id与origList前十项的id匹配。在
我发现了更多的注释,建议使用一种更具Python式的复制列表的方法
^{pr2}$我试过了,我还是发现圣殿骑士的身份证和奥利格利斯特的身份证是一致的。在
请不要提出更好的编码方法-我要在理解了复制的原理后,自己在列表理解中找出如何做到这一点
根据Kai的回答,正确的方法是:
import copy
tempList=copy.deepcopy(origList[0:10])
id(origList[0])
>>>>42980096
id(tempList[0])
>>>>42714136
很有魅力
如果复制对象,则不会复制其内容。在大多数情况下,这是你想要的。在你的情况下,你必须确保内容是自己复制的。你可以利用复制.deepcopy但是如果您有一个列表列表或类似的东西,我建议您使用
copy = [l[:] for l in list_of_lists]
,这样会快得多。在代码风格的一点提示:
切片创建浅拷贝。在您的示例中,我看到您在调用
item[-1]
上的insert()
,这意味着item是一个列表列表。这意味着浅拷贝仍然引用原始对象。你可以把它看作是复制指针,而不是实际对象。在您的解决方案在于使用深拷贝。Python为这类事情提供了一个copy module。当你搜索时,你会发现更多关于浅拷贝和深拷贝的信息。在
相关问题 更多 >
编程相关推荐