【发布时间】:2020-06-02 12:49:43
【问题描述】:
所以我刚刚遇到了一些奇怪的事情。
当我开始编程时,我在复制列表和更改时遇到了问题,然后得知我必须使用 my_list.copy() 来获取实际副本。现在我偶然发现了同样的效果,尽管使用了list.copy()。
所以这里是一个例子:
ori = [['1', '2', '3'],['1', '2', '3'],['1', '2', '3'],['1', '2', '3']]
copy = ori.copy()
for i, item in enumerate(copy):
del copy[i][0]
print('Original list: ', ori)
print('Copy of list: ', copy)
我期望的输出:
Original list: [['1', '2', '3'],['1', '2', '3'],['1', '2', '3'],['1', '2', '3']]
Copy of list: [['2', '3'], ['2', '3'], ['2', '3'], ['2', '3']]
实际输出:
Original list: [['2', '3'],['2', '3'],['2', '3'],['2', '3']]
Copy of list: [['2', '3'], ['2', '3'], ['2', '3'], ['2', '3']]
所以我想我的问题是:这是预期的行为吗?我需要使用copy.deepcopy() 还是有其他内置工具的解决方案?
我在刚刚遇到这个“问题”的 PC 上使用 Python 3.8.1。
【问题讨论】:
-
这是因为您刚刚完成了“浅”复制。欲了解更多信息,请read the documentation。特别是关于
copy.deepcopy。 -
谢谢大家,我刚刚在发布问题前 2 分钟阅读了文档。我想我一定跳过了关于对象集合的部分。 @HampusLarsson 我不认为您的链接适用于 100%,因为我使用了内置函数。但同样的逻辑也适用。
-
@n00by0815 它确实适用于 100%。当您调用
list.copy()时,它会调用copy,它本身与copy.copy相同。
标签: python python-3.x list copy shallow-copy