参考: https://www.liaoxuefeng.com/
先来看一个简单的变量地址存放的例子
a = 'ABC'
b = a
a = 'XYZ'
print(b)
那么最后一行打印出来的结果是ABC还是XYZ呢?
结果是:ABC
why?
一行一行的执行代码,看下到底发生了什么?
a = 'ABC' # 解释器创建了变量a和字符串'ABC',并且把a指向'ABC'
b = a # 解释器创建了变量b,并且把b也指向了'ABC'
a = 'XYZ' # 解释器创建了字符串'XYZ',并且把变量a改为指向'XYZ',但是b没有更改
所以最后打印的变量就是XYZ了。
一个“可变”的tuple类型其实也是类似的机制,变量内存地址指向问题。
看一个“可变”的tuple的例子
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])
这个tuple定义的时候有3个元素,分别是a,b和一个list。
不是说tuple不可变吗?what?怎么又可以改变了?
从表面上看,tuple里面的元素确实变了,但是其实变的不是tuple元素,而是tuple里面的第3个元素,一个list。tuple一开始指向的这个list并没有发生改变。
So,tuple所说的不变,指的是tuple里面的每个元素指向的内容是不变的。但是这个内容内部的动作我们是不care的。