看板 Python 關於我們 聯絡資訊
剛剛打了一段程式碼如下 想要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