看板 Python 關於我們 聯絡資訊
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
chababa: l = l + l 07/17 11:15
mikapauli: 第1個問題邏輯有點跳躍,你是怎麼推出全空的? 07/17 13:43
因為pop最後一個元素 不就等於pop掉自己本身嗎 哈哈 如果是最後一個元素等於自己本身的前提下 ※ 編輯: LessonWang (39.12.35.170), 07/17/2017 13:50:05
mikapauli: L本來是[1, 2, 3, L],pop出L後變成[1, 2, 3]很合理阿? 07/17 17:13
darkgerm: 2.無限次 3.你需要學一下指標和 Linked List 07/17 20:46
Sunal: 去看一下C++的參考 (reference) 07/18 10:46
LessonWang: 看來這個問題攸關於c 而不是單純地學會python就懂的事 07/18 12:36
LessonWang: 情 07/18 12:36
LessonWang: 所以推薦學python時要一起學c嗎 是這樣嗎 07/18 12:36
edwar: 是說為什麼要把l加在l的後面? 07/18 13:48
zerof: pass by reference. 07/18 13:53
uranusjr: 跟 C 沒有關係吧, 也不是 pass by reference 不要亂教.. 07/18 15:44
zerof: http://imgur.com/TDlJMiJ ??? 所以是 by value? 07/18 17:45
TaiwanFight: 簡單來看就是淺複製跟深複製的差別而已啊 07/18 18:15
TaiwanFight: 改用 L.append(L.copy()) 即可 07/18 18:16
TaiwanFight: 小妹是建議原波抽空自己寫一個語言啦 免得被python 07/18 18:16
TaiwanFight: 折磨 廠廠 07/18 18:16
有哦 後來就是用你這一行語法去完成的
Sunal: 沒人說學py前要先學c 但是針對原po過往的問題 學c應該很多 07/18 20:49
Sunal: 比較快樂些 07/18 20:52
我知道c比python更能了電腦的底層運作 感謝建議 只是第一個學的是python不是c 所以難免會覺得有很多不明白 而學python主要是拿來分析資料用和寫oj 試誤學習
uranusjr: @zerof: By reference 和 by value 的差異不是這樣看的 07/18 21:10
uranusjr: 這個議題去 Google 就有一堆資料, 可以試著研究看看 07/18 21:12
※ 編輯: 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
TitanEric: Python的所有行為都是pass by object reference 你舉的 07/18 23:17
TitanEric: 例子都符合呀 07/18 23:17
s860134: 我記得書上是說根據傳入參數 mutable/immutable 來分 07/19 02:03
s860134: 當然你說最底層的實做是用 C 一定是指標只來只去拉... 07/19 02:04
zerof: 認知就是 by ref, 你要不要貼個參考資料說它不是? 07/19 02:06
s860134: stackoverflow 986006 也是討論得亂七八糟XD 07/19 02:21
s860134: https://goo.gl/aXGATb 07/19 02:24
louis925: 你append 的是l的指標,當然會得到l囉 08/07 20:47
louis925: 程式語言還是從 c 學起吧 08/07 20:48