[問題] 關於list的append方法

看板Python作者 (橘白Cat)時間8年前 (2017/07/17 10:37), 8年前編輯推噓7(7022)
留言29則, 12人參與, 最新討論串1/3 (看更多)
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 ----- Sent from JPTT on my Asus ASUS_Z00UD. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.12.35.170 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1500259064.A.AF9.html

07/17 11:15, , 1F
l = l + l
07/17 11:15, 1F

07/17 13:43, , 2F
第1個問題邏輯有點跳躍,你是怎麼推出全空的?
07/17 13:43, 2F
因為pop最後一個元素 不就等於pop掉自己本身嗎 哈哈 如果是最後一個元素等於自己本身的前提下 ※ 編輯: LessonWang (39.12.35.170), 07/17/2017 13:50:05

07/17 17:13, , 3F
L本來是[1, 2, 3, L],pop出L後變成[1, 2, 3]很合理阿?
07/17 17:13, 3F

07/17 20:46, , 4F
2.無限次 3.你需要學一下指標和 Linked List
07/17 20:46, 4F

07/18 10:46, , 5F
去看一下C++的參考 (reference)
07/18 10:46, 5F

07/18 12:36, , 6F
看來這個問題攸關於c 而不是單純地學會python就懂的事
07/18 12:36, 6F

07/18 12:36, , 7F
07/18 12:36, 7F

07/18 12:36, , 8F
所以推薦學python時要一起學c嗎 是這樣嗎
07/18 12:36, 8F

07/18 13:48, , 9F
是說為什麼要把l加在l的後面?
07/18 13:48, 9F

07/18 13:53, , 10F
pass by reference.
07/18 13:53, 10F

07/18 15:44, , 11F
跟 C 沒有關係吧, 也不是 pass by reference 不要亂教..
07/18 15:44, 11F

07/18 17:45, , 12F
??? 所以是 by value?
07/18 17:45, 12F

07/18 18:15, , 13F
簡單來看就是淺複製跟深複製的差別而已啊
07/18 18:15, 13F

07/18 18:16, , 14F
改用 L.append(L.copy()) 即可
07/18 18:16, 14F

07/18 18:16, , 15F
小妹是建議原波抽空自己寫一個語言啦 免得被python
07/18 18:16, 15F

07/18 18:16, , 16F
折磨 廠廠
07/18 18:16, 16F
有哦 後來就是用你這一行語法去完成的

07/18 20:49, , 17F
沒人說學py前要先學c 但是針對原po過往的問題 學c應該很多
07/18 20:49, 17F

07/18 20:52, , 18F
比較快樂些
07/18 20:52, 18F
我知道c比python更能了電腦的底層運作 感謝建議 只是第一個學的是python不是c 所以難免會覺得有很多不明白 而學python主要是拿來分析資料用和寫oj 試誤學習

07/18 21:10, , 19F
@zerof: By reference 和 by value 的差異不是這樣看的
07/18 21:10, 19F

07/18 21:12, , 20F
這個議題去 Google 就有一堆資料, 可以試著研究看看
07/18 21:12, 20F
※ 編輯: LessonWang (39.12.35.170), 07/18/2017 21:19:41 ※ 編輯: LessonWang (39.12.35.170), 07/18/2017 21:20:20 ※ 編輯: LessonWang (39.12.35.170), 07/18/2017 21:33:29

07/18 23:17, , 21F
Python的所有行為都是pass by object reference 你舉的
07/18 23:17, 21F

07/18 23:17, , 22F
例子都符合呀
07/18 23:17, 22F

07/19 02:03, , 23F
我記得書上是說根據傳入參數 mutable/immutable 來分
07/19 02:03, 23F

07/19 02:04, , 24F
當然你說最底層的實做是用 C 一定是指標只來只去拉...
07/19 02:04, 24F

07/19 02:06, , 25F
認知就是 by ref, 你要不要貼個參考資料說它不是?
07/19 02:06, 25F

07/19 02:21, , 26F
stackoverflow 986006 也是討論得亂七八糟XD
07/19 02:21, 26F

07/19 02:24, , 27F
07/19 02:24, 27F

08/07 20:47, , 28F
你append 的是l的指標,當然會得到l囉
08/07 20:47, 28F

08/07 20:48, , 29F
程式語言還是從 c 學起吧
08/07 20:48, 29F
文章代碼(AID): #1PR2Buhv (Python)
文章代碼(AID): #1PR2Buhv (Python)