廖雪峰:“表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!”
定义时,将['a','b',]创建在一个内存中,然后list指向这个内存,t中的list,也是指向这个内存的意思。
重新将['x','y']创建在另一个内存中,然后将list重指向新的内存堆。而之前的t的指向并不改变。单纯的改变指向不改变内存单元里的值,所以不会改变。
要是用list[0]=['x']的方式,是修改了内存单元中的值,所以会影响到tuple的值。
list=['a','b',]
t=('A','B',list)
list=['x','y']
print(t)
print(list)
('A', 'B', ['a', 'b'])
['x', 'y']