2013-06-03 171 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)]