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

看板Python作者 (阿糾)時間8年前 (2016/11/22 06:47), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串2/2 (看更多)
直接回一篇好了,不確定我的觀念是不是正確的,歡迎指教 當你建立 [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

11/22 18:24, , 1F
此篇正解,我也犯過這個錯誤,找了半天才發現
11/22 18:24, 1F

11/22 23:37, , 2F
了解了 感謝你^^
11/22 23:37, 2F

11/23 11:11, , 3F
可以趁機看一下 mutable object的一些副作用
11/23 11:11, 3F
文章代碼(AID): #1OC-eGno (Python)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1OC-eGno (Python)