[問題] 關於賦值

看板Python作者 (牧)時間6年前 (2019/02/03 23:52), 6年前編輯推噓5(501)
留言6則, 5人參與, 6年前最新討論串1/3 (看更多)
如題,Python 的變數系統至今對我仍然是個謎。 Python 既是動態語言,變數感覺傾向於強型別但又不需要再宣告。因此,直譯器到底是怎 麼判斷型別的?而且,同一個變數名稱前後可能指涉不同型別。 主要想請教的是 dict 和 list 的部分: # base 讀自 json def callback(e): ... data = base data[...] = ... 這樣好像會改動到原本 base 的值欸? 還有例如: lst = [] a = [0, 0, 0] lst.append(a) for i in range(len(a)): a[i] += 1 lst.append(a) 結果 lst 的值不是 [[0, 0, 0], [1, 1, 1]] ,而是 [[1, 1, 1], [1, 1, 1]] 欸! 所以,當我作 data = base 這個運算時,感覺只是將 data 參考指向 base 這個實體而已 ,而我若 lst.append(a) 也只是把 lst 的尾端指向 a。那麼,Python 的指派究竟何時是 參考,何時是複製呢? -- Sent from my Sony Xperia XZ1 PiTT // PHJCI -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.107.176.158 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1549209158.A.FC6.html

02/03 23:58, 6年前 , 1F
Python的List是結合array與linked list,用連續記憶體
02/03 23:58, 1F

02/03 23:58, 6年前 , 2F
去存放list的指標
02/03 23:58, 2F
果然是指標,但是 Python 也沒有什麼傳址傳參考

02/04 00:46, 6年前 , 3F
Google一下 Python mutable immutable object
02/04 00:46, 3F

02/04 01:30, 6年前 , 4F
查查"python name binding"
02/04 01:30, 4F
感謝兩位,會再研究看看 ※ 編輯: nevikw39 (106.107.176.158), 02/04/2019 10:14:29

02/04 11:09, 6年前 , 5F
list.copy() 才是複製唷 其他都是alias
02/04 11:09, 5F

02/05 12:34, 6年前 , 6F
簡單來說是複製記憶體的指標位置
02/05 12:34, 6F
文章代碼(AID): #1SLmv6_6 (Python)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 3 篇):
文章代碼(AID): #1SLmv6_6 (Python)