[問題] List of List初始化

看板Python作者 (令狐瑜)時間7年前 (2016/11/22 14:18), 編輯推噓1(103)
留言4則, 1人參與, 最新討論串1/2 (看更多)
剛剛打了一段程式碼如下 想要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

11/22 14:35, , 1F
因為事實上你的 3D 陣列都指向同一個記憶體位置
11/22 14:35, 1F

11/22 14:35, , 2F
temp[m][n][x] 的 x 不管是多少都是指同一個位置
11/22 14:35, 2F

11/22 14:41, , 3F
temp[m][n][0].__sizeof__
11/22 14:41, 3F

11/22 14:43, , 4F
所以建置的時候需要獨立建立,我會這麼寫
11/22 14:43, 4F
文章代碼(AID): #1OC-CvF4 (Python)
文章代碼(AID): #1OC-CvF4 (Python)