可能是重复问题:
Python 2D列表在尝试修改单个值时有奇怪的行为
大家好,
我想知道以下两个语句是否相同?
a = [[0]*3]*3
b = [[0]*3 for i in range(3)]
结果看起来相同,但其中一种方法是否更好?这里有什么区别。
非常感谢您的帮助。
nos
可能是重复问题:
Python 2D列表在尝试修改单个值时有奇怪的行为
大家好,
我想知道以下两个语句是否相同?
a = [[0]*3]*3
b = [[0]*3 for i in range(3)]
它们并不相同
>>> a[1][2] = 5
>>> a
>>> [[0, 0, 5], [0, 0, 5], [0, 0, 5]]
>>> b[1][2] = 5
>>> b
>>> [[0, 0, 0], [0, 0, 5], [0, 0, 0]]
第一个创建的是指向单个内部数组的指针的外部数组,而第二个实际上创建了3个不同的数组。
>>> a = [[0]*3]*3
>>> a
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> a[0][0]=1
>>> a
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
>>> b = [[0]*3 for i in range(3)]
>>> b
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> b[0][0] = 1
>>> b
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
a[0].append("foo")
。 - Fred Foo