2015-09-15 171 views
-1

我具有由下列方式啓動的二維陣列,初始化一個二維陣列

array = [[False] * 2]] * 3。如果我更新值a[0][0] = True

假想的結果是:

[[True,False],[False,False],[False,False]]

但是,python解釋器顯示結果:

[[True,False],[True,False],[True,False]]

回答

0

基本上,你使用的語法是有效的 - 但它不會做你認爲它的作用。

當您使用該語法創建列表時,實際上並未創建唯一對象;您正在創建對同一對象的其他引用。您可以使用其任何引用來更改該列表,但一旦它被更改,所有引用仍將指向相同(更新)的列表。爲了說明這一點,請嘗試以下操作:

array = [["cat"]]*3 
print(array) 
array[0][0] = "dog" 
print(array) 

的第一次印刷將顯示[「貓」],[「貓」],[「貓」],這與預期相符,應該是正確的。但那些不是唯一的字符串。它們都是對同一個字符串的引用。所以當我們改變第一個(位於0,0)時,下一次打印給我們:[['dog'],['dog'],['dog']]

這就是爲什麼它發生這種情況。