任何人都可以解释为什么会这样吗?
案例1:
>>> a = [[0]] *3
>>> print a
[[0], [0], [0]]
>>> a[1].append(0)
>>> print a
[[0, 0], [0, 0], [0, 0]]
案例2:
>>> a = [[0],[0],[0]]
>>> print a
[[0], [0], [0]]
>>> a[1].append(0)
>>> print a
[[0], [0, 0], [0]]
为什么会这样?我期望情况1中数组的行为与情况2一样,但不是出于某种原因。
答案 0 :(得分:3)
在第一种情况下,a
中的三个元素实际上引用了相同的列表对象。你可以查看他们的身份证明:
>>> id(a[0])
4524132472
>>> id(a[1])
4524132472
>>> id(a[2])
4524132472
答案 1 :(得分:2)
在第一种情况下,您正在创建列表[0]
并将其复制3次。这是重复三次的同一个对象。您应该只使用不可变类型
要在具有可变类型时避免此问题,请使用list comprehension:
a = [[0] for _ in range(3)]