2015-05-25 40 views
2

我想初始化一個列表中的字符列表的矩陣。我想初始化一個矩陣,但得到相同的行重複

aRow = [ '0', '0','0' ] 
aGrid = [ aRow, aRow, aRow ] 

後,似乎像一個連續重複三次,我試圖修改以下各行,並打印結果:

aGrid[1][0] = '1' 
aGrid[2][0] = '2' 

print(aGrid) 

它看起來像我得到第三排的三倍。

[['2', '0', '0'], ['2', '0', '0'], ['2', '0', '0']] 

爲什麼?

回答

1

因爲你是。如果你想讓內容不同,你需要複製對象。

aGrid = [aRow, aRow[:], aRow[:]] 
+0

有點簡潔,但你的答案確實提供瞭解決方案,而不僅僅是解釋爲什麼它不起作用。 (不幸的是,那是我的問題,下次我只會問「你怎麼解決這個問題?」) – mkstlwtz

2

在Python中,當你分配值時,你真的分配值的引用。所以這個語句創建一個價值['0', '0', '0']列表,並分配一個參考,以該值aRow

aRow = [ '0', '0','0' ] 

因此該語句,然後創建一個具有三個引用相同的列表清單:

aGrid = [ aRow, aRow, aRow ] 

在Python中,列表是可變的值,所以對該值的所有引用都會反映對基礎值的更改。所以:

aGrid[1][0] = '1' 

和:

aGrid[2][0] = '2' 

兩個改變,在aGrid所有三個引用引用基礎列表的第一個元素,所以最後的變化是一個你會看到。