为什么这会发生在python中的列表中

时间:2013-10-28 09:09:27

标签: python string list variable-assignment mutable

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

这种行为的原因是什么?

>>> 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]

2 个答案:

答案 0 :(得分:3)

因为对象ab引用了同一个对象(正如您通过检查两个对象'id s所观察到的那样)。如果您将值更改为1,则另一个值也会更改。就像ba的克隆一样,但会继续成为克隆。

要避免此行为,您可以执行以下操作:

b = a[:]

b分配a

或者:

b = list(a)

或者:

import copy
b = copy.copy(a) # The copy module can be useful for nested lists.

答案 1 :(得分:0)

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