Re: [問題] List of List初始化

作者: Conjuror (阿糾)   2016-11-22 14:47:42
直接回一篇好了,不確定我的觀念是不是正確的,歡迎指教
當你建立 [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方式應該是怎樣呢?
: 非常感謝各位的幫忙與解答
作者: gozule (好冷啊~~)   2016-11-22 18:24:00
此篇正解,我也犯過這個錯誤,找了半天才發現
作者: fishlinghu (令狐瑜)   2016-11-22 23:37:00
了解了 感謝你^^
作者: Yshuan (倚絃)   2016-11-23 11:11:00
可以趁機看一下 mutable object的一些副作用

Links booklink

Contact Us: admin [ a t ] ucptt.com