Immutable并不表示唯一标识,例如标准数字类型Fraction
和Decimal
。
>>> from fractions import Fraction
>>> Fraction(1, 3) is Fraction(1, 3)
>>> False
但是,对于tuple
,str
和int
之类的所有内置不可变类型,它们的实例具有唯一标识。
>>> 1 is 1
>>> True
>>> (2-1, 0) is (int('1'), 0)
>>> True
要强制执行此操作,在我看来python使用一些字典来跟踪所有这些对象的创建,因此我们不能创建两个具有相同值的对象。这个假设是真的吗?有人可以解释一下背后的机制吗?