元组的相对不可变性
元组与多数Python集合(列表, 字典, 集,等待)一样,保存的是对象的引用。如果引用的元素是可变的,即元组本身不可变,元素依然可变。也就是说,元组的不可变性其实是指的是tuple数据结构的物理内容(即保存的引用)不可变,与引用的对象无关。
如示例1表明,元组的值会随着引用的可变对象的变化而变。元组中不可变的是元素发标识。
#示例1
>>> t1 = (1, 2, [30, 40]) #t1不可变,但是t1[-1]可变。
>>> t2 = (1, 2, [30, 40]) #构建元组t2,它的元素与t1一样。
>>> t1 == t2 #虽然t1和t2是不同的对象,但是二者相等——与预期相符。
True
>>> id(t1[-1]) #查看t1[-1]列表的标识。
1631417819656
>>> t1[-1].append(99) #就地修改t1[-1]列表。
>>> t1
(1, 2, [30, 40, 99])
>>> id(t1[-1]) #t1[-1]的标识没变,只是值变了。
1631417819656
>>> t1 == t2 #现在,t1和t2不相等。
False