当多个变量引用同一个python列表时,如果改变了其中一个变量的值,其他变量也会自动改变.为什么? &



我在Python中有以下小代码,其中我通过使用pop()函数改变list_one的值,但我没有在list_two中做任何更改。在打印list_onelist_two时,它们都打印出如下所述的相同结果。

arr = [1,2,3,4,5]
list_one = arr
list_two = arr
list_one.pop(0)
print(list_one)
print(list_two)
Output:
[2, 3, 4, 5]
[2, 3, 4, 5]

有人能帮我理解为什么list_two也在改变,即使我没有做任何改变。我理解list_one和list_two都指向'arr',但我期望list_one创建对修改列表的新引用,并期望list_two维护对'arr'的现有引用。

请帮帮我。

原因是当您将数组分配给list_onelist_two时,您基本上将引用分配给数组,它们指向相同的资源。因此,由于这两个变量对数组有相同的引用,它们不仅具有相等的值,而且的值也相同

如果需要,也可以复制数组,但将数组赋值给变量不会复制整个数组。

文档也有说明,像这样:

Python中的赋值语句不复制对象,它们在目标对象和对象之间创建绑定。对于可变或包含可变项的集合,有时需要一个副本,以便可以在不更改另一个副本的情况下更改一个副本。该模块提供通用的浅拷贝和深拷贝操作(将在下面解释)。