先定义一个 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 值,但事实是确实影响了,为什么?
1
xxxy 2018-09-21 16:06:34 +08:00
python 日经贴。可以了解下 python 的 object 引用
|
3
401Li 2018-09-21 17:41:09 +08:00 via Android
流畅的 Python 里说过,指向同一个内存空间
|
4
thinker3 2018-09-21 22:14:15 +08:00
你还修改了 list 本身
|
5
anonymous256 2018-09-21 23:33:24 +08:00 via Android
1. 虽然楼主已经知道,还是自作多情解释一下: python 与 C/C++/Golang 有个明显的不同是: 它不允许程序员选择传值或者传址(或者说传引用、传指针)。Python 采用的参数传递采用是"传对象引用": 如果一种不可改变对象,如 str, int, float 等,那么它无法被修改,相当于传值; 另一种是可改变对象,list, dict,那么它总是会修改,相当于传址。
2. list 是内建类型,不建议作为变量名。 |
6
fayefang OP @401Li 是的,正如如一楼所说,主要是 python 中的 list 的指针指向不变性导致的
|
8
fayefang OP @anonymous256 嗯嗯,解释的很详细了,太感谢了🙏🏻
|
9
tanglijun 2018-09-22 11:05:52 +08:00
修改了 list 指向而已,实际上并没有改变
|