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
提交
取消