整数对象和字符串对象是不可变对象,所以Python 会很高效的缓存它们。这会造成我们认为Python 应该
创建新对象时,它却没有创建新对象的假象。看下面的例子:
>>> a = 1
>>> id(a)
8402824
>>> b = 1
>>> id(b)
8402824
>>>
>>> c = 1.0
>>> id(c)
8651220
>>> d = 1.0
>>> id(d)
8651204
在上面的例子中,a 和 b 指向了相同的整数对象,但是 c 和 d 并没有指向相同的浮点数
对象。如果我们是纯粹主义者,我们会希望 a 与 b 能和 c 与 d 一样,因为我们本意就是为
了创建两个整数对象,而不是像 b = a 这样的结果。
Python 仅缓存简单整数,因为它认为在Python 应用程序中这些小整数会经常被用到。当
我们在写作本书的时候,Python 缓存的整数范围是(-1, 100),不过这个范围是会改变的,所
以请不要在你的应用程序使用这个特性。
Python 2.3 中决定,在预定义缓存字符串表之外的字符串,如果不再有任何引用指向它,
那这个字符串将不会被缓存。也就是说, 被缓存的字符串将不会象以前那样永生不灭,对象回
收器一样可以回收不再被使用的字符串。从Python 1.5 起提供的用于缓存字符的内建函数
intern() 也已经不再推荐使用, 即将被废弃。