直接回一篇好了,不確定我的觀念是不是正確的,歡迎指教
當你建立 [True, True, Ture] 的時候,實際上是在記憶體建立一個 list
而重覆 [] *3 的時候,實際上雖然陣列變成 [[], [], []] 的樣子,
但是不管哪一個子 list 都是指向同樣的記憶體空間。
如果要建立不同的空間,就需要重新宣告,或是用 deepcopy 去複製
[[[True, True, True] for i in range(3)] for x in range(5)]
※ 引述《fishlinghu (令狐瑜)》之銘言:
: 剛剛打了一段程式碼如下
: 想要initialize一個3D的list
: temp = [[[True, True, True]]*3]*5
: 結果發現
: 改裡面任一個element
: 其他對應位置的element也會一起改
: 例如我用temp[0][0][2] = False
: 則temp[m][n][2]會全部變成False
: 想請問為何會這樣呢?
: 希望各位高手可以從觀念來解釋
: 那正確的initialization方式應該是怎樣呢?
: 非常感謝各位的幫忙與解答