我尝试使用以下语句
在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]
为什么?
顺便说一句,这是构建二维数组的最佳方法吗?如果没有,最好的是什么?
答案 0 :(得分:4)
因为你告诉它制作同一个可变列表的2份副本。
S = [[0] * 10 for x in range(2)]
答案 1 :(得分:0)
S = [[0] * 10] * 2表示[[0] * 10]的2个引用,所以当你改变一个时,另一个会改变。顺便说一下,[0] * 10的原因很好是:对数字的引用。