tuple 中的 list 元素为什么能这样被修改?
先定义一个 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 值,但事实是确实影响了,为什么?
----------------------- 以下是精选回复-----------------------
答:python 日经贴。可以了解下 python 的 object 引用
答:流畅的 Python 里说过,指向同一个内存空间
答:你还修改了 list 本身
答:1. 虽然楼主已经知道,还是自作多情解释一下: python 与 C/C++/Golang 有个明显的不同是: 它不允许程序员选择传值或者传址(或者说传引用、传指针)。Python 采用的参数传递采用是"传对象引用": 如果一种不可改变对象,如 str, int, float 等,那么它无法被修改,相当于传值; 另一种是可改变对象,list, dict,那么它总是会修改,相当于传址。
2. list 是内建类型,不建议作为变量名。
答:修改了 list 指向而已,实际上并没有改变
0条评论