http://i.imgur.com/MRT8fzD.jpg
如題 當我把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:00l = l + l
第1個問題邏輯有點跳躍,你是怎麼推出全空的?L本來是[1, 2, 3, L],pop出L後變成[1, 2, 3]很合理阿?
2.無限次 3.你需要學一下指標和 Linked List
作者:
Sunal (SSSSSSSSSSSSSSSSSSSSSSS)
2017-07-18 10:46:00去看一下C++的參考 (reference)
看來這個問題攸關於c 而不是單純地學會python就懂的事情所以推薦學python時要一起學c嗎 是這樣嗎
作者: edwar (海邊的野孩子) 2017-07-18 13:48:00
是說為什麼要把l加在l的後面?
作者:
zerof (貓橘毛發呆雕像)
2017-07-18 13:53:00pass by reference.
作者:
uranusjr (â†é€™äººæ˜¯è¶…級笨蛋)
2017-07-18 15:44:00跟 C 沒有關係吧, 也不是 pass by reference 不要亂教..
作者:
zerof (貓橘毛發呆雕像)
2017-07-18 17:45:00作者: 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 就有一堆資料, 可以試著研究看看
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, 你要不要貼個參考資料說它不是?