id(5) is id(5) #returned False
id(5) == id(5) #returned True如果操作数指向同一个对象,is 运算符返回 true。这里它指向同一个对象(即 5)。但在这里,它返回为 False。这背后的原因是什么?
1 回答
慕的地10843
TA贡献1785条经验 获得超8个赞
首先,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
添加回答
举报
0/150
提交
取消