tuple 中的 list 元素为什么能这样被修改?

2018-09-21 16:01:29 +08:00
 fayefang

先定义一个 tuple 元素 t = ('a', 'b', ['A', 'B']) 然后代码如下: list = t[2]; list[0] = 'OHOH'; print t; list[1] = 'OHOH'; print t;

输出结果: ('a', 'b', ['OHOH', 'B']) ('a', 'b', ['OHOH', 'OHOH'])

问题:这里明明是把 t[2]取出来赋值给了 list,按说无论怎么修改 list,修改的只是 list 的值,并不会影响 t 中的 list 值,但事实是确实影响了,为什么?

2110 次点击
所在节点    Python
9 条回复
xxxy
2018-09-21 16:06:34 +08:00
python 日经贴。可以了解下 python 的 object 引用
fayefang
2018-09-21 16:17:18 +08:00
@xxxy 学到了,刚明白,感谢🙏🏻
401Li
2018-09-21 17:41:09 +08:00
流畅的 Python 里说过,指向同一个内存空间
thinker3
2018-09-21 22:14:15 +08:00
你还修改了 list 本身
anonymous256
2018-09-21 23:33:24 +08:00
1. 虽然楼主已经知道,还是自作多情解释一下: python 与 C/C++/Golang 有个明显的不同是: 它不允许程序员选择传值或者传址(或者说传引用、传指针)。Python 采用的参数传递采用是"传对象引用": 如果一种不可改变对象,如 str, int, float 等,那么它无法被修改,相当于传值; 另一种是可改变对象,list, dict,那么它总是会修改,相当于传址。
2. list 是内建类型,不建议作为变量名。
fayefang
2018-09-22 06:51:38 +08:00
@401Li 是的,正如如一楼所说,主要是 python 中的 list 的指针指向不变性导致的
fayefang
2018-09-22 06:52:18 +08:00
@401Li 哦哦🙏🏻
fayefang
2018-09-22 06:55:21 +08:00
@anonymous256 嗯嗯,解释的很详细了,太感谢了🙏🏻
tanglijun
2018-09-22 11:05:52 +08:00
修改了 list 指向而已,实际上并没有改变

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/491579

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX