[问题] 关于list的append方法

楼主: LessonWang (橘白Cat)   2017-07-17 10:37:42


如题 当我把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:00
l = l + l
作者: mikapauli (桜花)   2017-07-17 13:43:00
第1个问题逻辑有点跳跃,你是怎么推出全空的?L本来是[1, 2, 3, L],pop出L后变成[1, 2, 3]很合理阿?
作者: darkgerm (黑骏)   2017-07-17 20:46:00
2.无限次 3.你需要学一下指标和 Linked List
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2017-07-18 10:46:00
去看一下C++的参考 (reference)
楼主: LessonWang (橘白Cat)   2017-07-18 12:36:00
看来这个问题攸关于c 而不是单纯地学会python就懂的事情所以推荐学python时要一起学c吗 是这样吗
作者: edwar (海边的野孩子)   2017-07-18 13:48:00
是说为什么要把l加在l的后面?
作者: zerof (猫橘毛发呆雕像)   2017-07-18 13:53:00
pass by reference.
作者: uranusjr (←這人是超級笨蛋)   2017-07-18 15:44:00
跟 C 没有关系吧, 也不是 pass by reference 不要乱教..
作者: zerof (猫橘毛发呆雕像)   2017-07-18 17:45:00
" target="_blank" rel="nofollow">
??? 所以是 by value?
作者: 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 就有一堆资料, 可以试着研究看看
作者: TitanEric (泰坦)   2017-07-18 23:17:00
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, 你要不要贴个参考资料说它不是?
作者: s860134 (s860134)   2017-07-19 02:21:00
stackoverflow 986006 也是讨论得乱七八糟XDhttps://goo.gl/aXGATb

Links booklink

Contact Us: admin [ a t ] ucptt.com