Python 为什么list.copy()方法很浅?

Python 为什么list.copy()方法很浅?,python,list,copy,deep-copy,shallow-copy,Python,List,Copy,Deep Copy,Shallow 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] 有什么问题?哪里有错误?此示

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

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

这就是浅副本。您将浅层副本与不存在副本混淆。该副本是浅层的,因为如果
num1
包含列表或字典,则不会复制这些结构。如果copy()按照您的想法执行,为什么它是必需的函数?如果列表元素是数字,那么浅元素和深元素之间没有区别;数字下方没有任何内容。有人能提供一个详细解释的资源链接吗?但为什么它不适用于简单列表?我不明白。为什么在简单列表的情况下,它不会影响复制的one@NikaMazulina因为它是一个副本。但是在嵌套列表的情况下,它会影响副本。它也只是一个副本。有什么区别?@NikaMazulina因为
num1[0].append(9)
不是在改变列表,而是在改变列表中的一个元素。