你想当然地对“不可变序列”这个词语产生了误解。
首先我们要理解,何为“不可变对象”。
objects whose value is unchangeable once they are created are called immutable.
翻译过来,如果一个对象的value不可改变,那么该对象就是“不可变”的。
然后我们思考下,序列的value是什么东西。
Some objects contain references to other objects; these are called containers. Examples of containers are tuples, lists and dictionaries. The references are part of a container's value.
翻译过来,序列/容器的value就是该序列中的“元素的id”。是元素的id,而不是元素的value,懂了吗?还不懂就看python官方手册的《Data model》章节。
>>> foo=([1,2], [3,4]) #包含可变对象的【不可变序列】
>>> [id(i) for i in foo] #之中所有元素的id,就是【不可变序列】的value
[1747679411912, 1747679411848]
>>> foo[0][0]=5 #修改【不可变序列】的元素的value,而非修改【不可变序列】的value
>>> foo
([5, 2], [3, 4])
>>> [id(i) for i in foo] #【不可变序列】的value没有改变
[1747679411912, 1747679411848]