构造二维列表

0 投票
2 回答
1281 浏览
提问于 2025-04-17 03:55

可能重复的问题:
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)]

撰写回答