- 此问题在此处已有答案**:
Python assigning multiple variables to same value? list behavior(12个答案)
十小时前关门了。
我有下面的小代码在Python中,我改变了list_one
的值通过使用pop()
函数,但我没有做任何改变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'的现有引用。
请帮帮我。
2条答案
按热度按时间pvabu6sv1#
原因是当你给
list_one
或list_two
赋值数组时,你基本上是给数组赋值了一个引用,它们指向了相同的资源,所以,因为这两个变量有相同的数组引用,它们不仅有相同的值,而且值**也是相同的。如果需要,也可以使用copy an array,但是将数组赋给变量并不会复制整个数组。
docs也声明了这一点,如下所示:
Python中的赋值语句不复制对象,它们在目标和对象之间创建绑定。对于可变的或者包含可变项的集合,有时候需要一个副本,这样可以改变一个副本而不改变另一个。这个模块提供了通用的浅和深复制操作(下面解释)。
k97glaaz2#
我对Python不太了解,但Java中也是如此。我们从头开始:你创建一个列表对象([1,2,3,4,5]),然后把这个列表对象赋给一个变量,这里的要点是你只把列表的地址存储在变量中(你只指向列表),而不是列表本身。
所以如果你现在创建一个新的变量,并让它指向这个列表的地址,你将有两个变量指向同一个地址,或者同一个列表。
所以如果你改变了那个列表,两个变量都指向那个列表,因此会给你一个新的。
我希望A以一种有用和简单的方式描述它;)