【问题标题】:Why is the list.copy() method shallow? [duplicate]为什么 list.copy() 方法很浅? [复制]
【发布时间】:2023-03-22 11:03:01
【问题描述】:

在官方 Python 文档中说 list.copy() 返回列表的浅表副本。 但是根据下面的代码,它是深拷贝,因为一个列表的变化不会导致另一个列表的变化。

>>> num1 = [1,2,3,4,5]
>>> num2 = num1.copy()
>>> num1.append(9)
>>> num1
[1, 2, 3, 4, 5, 9]
>>> num2
[1, 2, 3, 4, 5]

有什么问题?哪里出错了?

【问题讨论】:

  • 这就是浅拷贝。您将浅拷贝与非拷贝混淆了。
  • 复制很浅,因为如果num1 包含列表或字典,则不会复制这些结构。
  • 如果 copy() 符合您的想法,为什么它是必要的功能? num2 = num1 不会做同样的事情吗?
  • 列表元素为数字时,浅层和深层没有区别;数字“下方”没有任何内容。
  • 谁能给出详细解释的资源链接?

标签: python list copy deep-copy shallow-copy


【解决方案1】:

这个例子将说明为什么这是一个浅拷贝

>>> num1 = [[1,2,3],[4,5,6]]
>>> num2 = num1.copy()
>>> num1[0].append(9)
>>> num1
[[1, 2, 3, 9], [4, 5, 6]]
>>> num2
[[1, 2, 3, 9], [4, 5, 6]]

由于原始列表包含可变元素,因此外部副本包含可变元素的浅层副本。

【讨论】:

  • 但为什么它不适用于简单列表?我不明白。为什么在简单列表的情况下它不会影响复制的列表
  • @NikaMazulina 因为它是复制品。
  • 但是在嵌套列表的情况下,例如它会影响副本。它也只是一个副本。有什么区别?
  • @NikaMazulina 因为num1[0].append(9) 没有更改列表,它正在更改列表中的元素
猜你喜欢
  • 2017-10-14
  • 1970-01-01
  • 2023-03-09
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 2013-05-15
相关资源
最近更新 更多