构造二维列表
可能重复的问题:
Python中列表的意外特性
我尝试用下面的语句在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
S = [[0] * 10] * 2 这段代码的意思是创建了两个指向同一个列表的引用。也就是说,当你修改其中一个列表时,另一个列表也会跟着改变。顺便说一下,为什么 [0] * 10 这样写是可以的呢?因为它是对数字的一个引用。
4
因为你让它创建了两个相同的可变列表的副本。
S = [[0] * 10 for x in range(2)]