我在Python中有以下小代码,其中我通过使用pop()
函数改变list_one
的值,但我没有在list_two
中做任何更改。在打印list_one
和list_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_one
或list_two
时,您基本上将引用分配给数组,它们指向相同的资源。因此,由于这两个变量对数组有相同的引用,它们不仅具有相等的值,而且的值也相同。
如果需要,也可以复制数组,但将数组赋值给变量不会复制整个数组。
文档也有说明,像这样:
Python中的赋值语句不复制对象,它们在目标对象和对象之间创建绑定。对于可变或包含可变项的集合,有时需要一个副本,以便可以在不更改另一个副本的情况下更改一个副本。该模块提供通用的浅拷贝和深拷贝操作(将在下面解释)。