Python列表索引的疑问 求来人解答

img


为什么s[0][0]不等于x[0][0]?


>>> s=[[1]]*3
>>> s
[[1], [1], [1]]
>>> id(s[0])
33772616
>>> id(s[1])
33772616
>>> id(s[2])
33772616
>>> x=[[1],[1],[1]]
>>> id(x[0])
34635016
>>> id(x[1])
34648648
>>> id(x[2])
39211784

s的三个元素,指向同一个地址, 改变任何一个,另外两个都会变

>>> s[0][0] = 5
>>> s
[[5], [5], [5]]
>>> s[2][0] = 6
>>> s
[[6], [6], [6]]

x 则是一个正常的列表。

所以,尽量少用
s=[[1]]*3 这样的初始化方式
可以考虑这种列表初始化

>>> y = [[1] for n in range(3)]
>>> y
[[1], [1], [1]]
>>> id(y[0])
39211848
>>> id(y[1])
39212232
>>> id(y[2])
39212104