python的对象身份比较

来源:互联网 发布:json txt格式转换器 编辑:程序博客网 时间:2024/04/28 09:50

整型对象和字符串对象是不可变对象,所以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应用程序中这些小整型会经常被用到。python2.5缓存的整型范围是(-1,100),python3已经有所扩大,不过这个范围是会改变的,所以请不要在你的应用程序使用这个特性。

python2.3中决定,在预定义缓存字符串表之外的字符串,如果不再有任何引用指向它,那这个字符串将不会被缓存。也就是说,被缓存的字符串将不会像以前那样永生不灭,对象回收器一样可以回收不再被使用的字符串。从python1.5起提供的用于缓存字符的内建函数intern()也已经不再推荐使用,即将被废弃。