构建二维列表

时间:2011-10-08 08:51:52

标签: python list

  

可能重复:
  Unexpected feature in a Python list of lists

我尝试使用以下语句

在python中创建一个列表
S = [0] * 10

它运作良好

S[0] = 1
S
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]

但是当我尝试生成二维列表时,会出现意外情况

S = [[0] * 10] * 2
S[0][1] = 1
S[0][2] = 2
S
[[0, 1, 2, 0, 0, 0, 0, 0, 0, 0], [0, 1, 2, 0, 0, 0, 0, 0, 0, 0]]

请注意S[0] == S[1]

为什么?

顺便说一句,这是构建二维数组的最佳方法吗?如果没有,最好的是什么?

2 个答案:

答案 0 :(得分:4)

因为你告诉它制作同一个可变列表的2份副本。

S = [[0] * 10 for x in range(2)]

答案 1 :(得分:0)

S = [[0] * 10] * 2表示[[0] * 10]的2个引用,所以当你改变一个时,另一个会改变。顺便说一下,[0] * 10的原因很好是:对数字的引用。