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