作者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/cn.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