作者fishlinghu (令狐瑜)
看板Python
標題[問題] List of List初始化
時間Tue Nov 22 14:18:30 2016
剛剛打了一段程式碼如下
想要initialize一個3D的list
temp = [[[True, True, True]]*3]*5
結果發現
改裡面任一個element
其他對應位置的element也會一起改
例如我用temp[0][0][2] = False
則temp[m][n][2]會全部變成False
想請問為何會這樣呢?
希望各位高手可以從觀念來解釋
那正確的initialization方式應該是怎樣呢?
非常感謝各位的幫忙與解答
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 128.61.97.157
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1479795513.A.3C4.html
推 Conjuror: 因為事實上你的 3D 陣列都指向同一個記憶體位置 11/22 14:35
→ Conjuror: temp[m][n][x] 的 x 不管是多少都是指同一個位置 11/22 14:35
→ Conjuror: temp[m][n][0].__sizeof__ 11/22 14:41
→ Conjuror: 所以建置的時候需要獨立建立,我會這麼寫 11/22 14:43