如何理解:"由不可变对象直接引用的对象集合无法更改"?

时间:2018-04-01 18:59:01

标签: python immutability

来自Python documentation

  

一旦不可变序列类型的对象不能改变   创建。 (如果对象包含对其他对象的引用,则为这些对象   其他对象可能是可变的并且可能会被更改;然而   由不可变对象直接引用的对象的集合   无法改变。)

虽然原始引用的第一部分是可以理解的,但我还是没有得到最后一句话。我如何理解短语:"由不可变对象直接引用"?

2 个答案:

答案 0 :(得分:1)

解释这个问题的最好方法可能就是一个例子。

>>> a = [1, 2, 3]
>>> b = (a, a)

b是一个元组 - 一个不可变的序列。但是,它包含的对象是可变的列表。

可以修改集合中的可变对象:

>>> a.append(4)
>>> b
([1, 2, 3, 4], [1, 2, 3, 4])

但是,无法更改a中存在哪些对象,因为它是不可变的。 a的第一个和第二个元素将始终引用相同的列表,并且无法更改它。

答案 1 :(得分:1)

这意味着不可变tuple可以引用可变对象,例如一个list,可以更改,而元组本身不变。

my_list = [1, 2, 3]
my_tuple = ('a', my_list)

print(my_tuple)
>>> ('a', [1, 2, 3])

my_list.append(4)

print(my_tuple)
>>> ('a', [1, 2, 3, 4])