当我将一个列表分配给另一个列表时,我看到在更改一个列表中的一个元素时,另一个元素会自动分配该值。
这种行为的原因是什么?
>>> 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]
答案 0 :(得分:3)
因为对象a
和b
引用了同一个对象(正如您通过检查两个对象'id
s所观察到的那样)。如果您将值更改为1,则另一个值也会更改。就像b
是a
的克隆一样,但会继续成为克隆。
要避免此行为,您可以执行以下操作:
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()并检查。