-1
我具有由下列方式啓動的二維陣列,初始化一個二維陣列
array = [[False] * 2]] * 3
。如果我更新值a[0][0] = True
假想的結果是:
[[True,False],[False,False],[False,False]]
但是,python解釋器顯示結果:
[[True,False],[True,False],[True,False]]
我具有由下列方式啓動的二維陣列,初始化一個二維陣列
array = [[False] * 2]] * 3
。如果我更新值a[0][0] = True
假想的結果是:
[[True,False],[False,False],[False,False]]
但是,python解釋器顯示結果:
[[True,False],[True,False],[True,False]]
基本上,你使用的語法是有效的 - 但它不會做你認爲它的作用。
當您使用該語法創建列表時,實際上並未創建唯一對象;您正在創建對同一對象的其他引用。您可以使用其任何引用來更改該列表,但一旦它被更改,所有引用仍將指向相同(更新)的列表。爲了說明這一點,請嘗試以下操作:
array = [["cat"]]*3
print(array)
array[0][0] = "dog"
print(array)
的第一次印刷將顯示[「貓」],[「貓」],[「貓」],這與預期相符,應該是正確的。但那些不是唯一的字符串。它們都是對同一個字符串的引用。所以當我們改變第一個(位於0,0)時,下一次打印給我們:[['dog'],['dog'],['dog']]
這就是爲什麼它發生這種情況。