-2

当我将一个列表分配给另一个列表时,我看到在更改一个列表中的一个元素时,另一个元素会自动分配该值。

这种行为的原因是什么?

>>> a = [1,2,3] # create a list
>>> b = a
>>> b
[1, 2, 3]
>>> id(a)
40307408
>>> id(b)
40307408
>>> a[2] = 5
>>> b
[1, 2, 5]
>>> b[1] = 10
>>> a
[1, 10, 5]
4

2 回答 2

3

因为对象ab引用相同的对象(正如您通过检查两个对象所观察到id的)。如果你改变一个值,另一个也会改变。就像b是 的克隆a,但将继续成为克隆。

为避免这种行为,您可以执行以下操作:

b = a[:]

它分配ba.

或者:

b = list(a)

或者:

import copy
b = copy.copy(a) # The copy module can be useful for nested lists.
于 2013-10-28T09:10:45.277 回答
0

通过调用b = a,您实际上只是为同一个对象分配了另一个名称,如id(a)id(b)显示。如果要将 a 复制到 b,则应使用b = a[:]b = list(a)。在这种情况下,a 和 b 将具有不同的生命周期。尝试调用 id() 并检查。

于 2013-10-28T09:15:24.600 回答