【问题标题】:Python alters original list despite using list.copy() [duplicate]尽管使用 list.copy(),Python 还是改变了原始列表 [重复]
【发布时间】: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


【解决方案1】:

copy() 方法返回列表的浅表副本。 请改用copy.deepcopy()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2018-04-16
    • 2019-05-30
    • 1970-01-01
    • 2014-02-03
    • 2021-07-20
    • 2020-01-22
    相关资源
    最近更新 更多