作者Conjuror (阿糾)
看板Python
標題Re: [問題] List of List初始化
時間Tue Nov 22 14:47:42 2016
直接回一篇好了,不確定我的觀念是不是正確的,歡迎指教
當你建立 [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方式應該是怎樣呢?
: 非常感謝各位的幫忙與解答
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.10.190
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1479797264.A.C72.html
推 gozule: 此篇正解,我也犯過這個錯誤,找了半天才發現 11/22 18:24
推 fishlinghu: 了解了 感謝你^^ 11/22 23:37
推 Yshuan: 可以趁機看一下 mutable object的一些副作用 11/23 11:11