id(5) is id(5) #returned False
id(5) == id(5) #returned True
如果操作数指向同一对象,则is运算符返回true。在这里,它指向同一对象(即5)。但是在这里,它返回为False。背后的原因是什么?
首先,CPython会缓存较小的int
值,因此始终将同一对象用于5
。
id(5)
但是,返回一个大 int
值(例如id(5) == 4431761200
)。此值未缓存,因此可能有两次调用,id(5)
可能会或可能不会产生表示该值的同一对象。在表达式id(5) is id(5)
和中id(5) == id(5)
,如果不缓存大对象,则必然有两个不同的对象,因为这两个对象必须处于活动状态,直到is
或==
完成其比较为止。
请注意,在某些情况下,看起来好像是在缓存对象,例如,
>>> id(id(5))
4434162352
>>> id(id(5))
4434162352
但这只是一种情况,对于两个寿命不重叠的对象,可以重复使用相同的标识符。
>>> x = id(5)
>>> y = id(5)
>>> x == y
True
>>> id(x) is id(y)
False
>>> id(x) == id(y)
False
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句