首页 > 解决方案 > 为什么 list.copy() 方法很浅?

问题描述

在官方 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]

问题是什么?哪里有错?

标签: pythonlistcopydeep-copyshallow-copy

解决方案


这个例子将演示为什么这是一个浅拷贝

>>> 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]]

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


推荐阅读