2013-06-03 140 views
1

我试图做一些与列表的Python列表,但我发现了一些奇怪的索引。
如果我想创建一个2 * 2“矩阵”,我做Python列表索引

matrix = [[0]*2]*2 

然后,如果我想使用,比如改变第一行第一列,

matrix[0][0] = 1  

我会得到[[1,0],[1,0]],而不是[[1,0],[0,0]]。有谁知道出了什么问题?

+0

@DSM - 相当快...而这甚至不是你的答案。先生,干得好! – mgilson

+0

令人难以置信的快速我会说:) –

回答

5

使用清单上的*运营商创建一个浅拷贝,所以[[0]*2]*2等同于以下内容:

inner = [0, 0] 
matrix = [inner, inner] 

由于matrix两个位置都是相同的列表的引用,修改任何一个将修改另一个。相反,使用以下内容:

matrix = [[0]*2 for i in range(2)]