python中的id()函数和is运算符

id(5) is id(5)  #returned False
id(5) == id(5)  #returned True

如果操作数指向同一个对象,is 运算符返回 true。这里它指向同一个对象(即 5)。但在这里,它返回为 False。这背后的原因是什么?


泛舟湖上清波郎朗
浏览 68回答 1
1回答

慕的地10843

首先,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 == yTrue>>> id(x) is id(y)False>>> id(x) == id(y)False
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python