[問題] 關於list的append方法

作者: LessonWang (橘白Cat)   2017-07-17 10:37:42


如題 當我把l這個list
用append加入到自己的最後一個位置時
然後就變成
l最後一個元素等於自己l本身
而不是變成[1,2,3,[1,2,3]]
造成l裡面有l裡面有l裡面有l...(無止盡)
我用id去確認
發現l和l[-1]和l[-1][-1].....的id都一樣
我的問題有以下幾個:
1.後來我用l.pop()
卻發現l不是空list
而是[1,2,3]
如果照"最後一個元素等於自己本身"的邏輯
那麼不是應該要全空嗎
2.像這種無止盡的索引
l[-1][-1][-1][-1][-1][-1][-1]....
最多能索引幾次?
3.為何會造成這樣的現象呢?
新手發問 請前輩們指導一下 感謝qaq
作者: chababa (洽八八)   2017-07-17 11:15:00
l = l + l
作者: mikapauli (桜花)   2017-07-17 13:43:00
第1個問題邏輯有點跳躍,你是怎麼推出全空的?L本來是[1, 2, 3, L],pop出L後變成[1, 2, 3]很合理阿?
作者: darkgerm (黑駿)   2017-07-17 20:46:00
2.無限次 3.你需要學一下指標和 Linked List
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2017-07-18 10:46:00
去看一下C++的參考 (reference)
作者: LessonWang (橘白Cat)   2017-07-18 12:36:00
看來這個問題攸關於c 而不是單純地學會python就懂的事情所以推薦學python時要一起學c嗎 是這樣嗎
作者: edwar (海邊的野孩子)   2017-07-18 13:48:00
是說為什麼要把l加在l的後面?
作者: zerof (貓橘毛發呆雕像)   2017-07-18 13:53:00
pass by reference.
作者: uranusjr (←這人是超級笨蛋)   2017-07-18 15:44:00
跟 C 沒有關係吧, 也不是 pass by reference 不要亂教..
作者: zerof (貓橘毛發呆雕像)   2017-07-18 17:45:00
" target="_blank" rel="nofollow">
??? 所以是 by value?
作者: TaiwanFight   2017-07-18 18:15:00
簡單來看就是淺複製跟深複製的差別而已啊改用 L.append(L.copy()) 即可小妹是建議原波抽空自己寫一個語言啦 免得被python折磨 廠廠
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2017-07-18 20:49:00
沒人說學py前要先學c 但是針對原po過往的問題 學c應該很多比較快樂些
作者: uranusjr (←這人是超級笨蛋)   2017-07-18 21:10:00
@zerof: By reference 和 by value 的差異不是這樣看的這個議題去 Google 就有一堆資料, 可以試著研究看看
作者: TitanEric (泰坦)   2017-07-18 23:17:00
Python的所有行為都是pass by object reference 你舉的例子都符合呀
作者: s860134 (s860134)   2017-07-19 02:03:00
我記得書上是說根據傳入參數 mutable/immutable 來分當然你說最底層的實做是用 C 一定是指標只來只去拉...
作者: zerof (貓橘毛發呆雕像)   2017-07-19 02:06:00
認知就是 by ref, 你要不要貼個參考資料說它不是?
作者: s860134 (s860134)   2017-07-19 02:21:00
stackoverflow 986006 也是討論得亂七八糟XDhttps://goo.gl/aXGATb

Links booklink

Contact Us: admin [ a t ] ucptt.com