1 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
首先,CPython 緩存較小的int值,因此相同的對(duì)象始終用于5.
id(5)但是,返回一個(gè)很大的 int值(例如,id(5) == 4431761200)。該值不會(huì)被緩存,因此兩次調(diào)用可能會(huì)id(5)或可能不會(huì)生成表示該值的相同對(duì)象。在表達(dá)式id(5) is id(5)和中id(5) == id(5),如果未緩存大對(duì)象,則必然有兩個(gè)不同的對(duì)象,因?yàn)檫@兩個(gè)對(duì)象都必須處于活動(dòng)狀態(tài),直到is或==完成其比較。
請(qǐng)注意,在某些情況下,對(duì)象可能看起來(lái)像是被緩存了,例如,
>>> id(id(5))
4434162352
>>> id(id(5))
4434162352
但這只是同一標(biāo)識(shí)符被生命周期不重疊的兩個(gè)對(duì)象重用的情況。
>>> x = id(5)
>>> y = id(5)
>>> x == y
True
>>> id(x) is id(y)
False
>>> id(x) == id(y)
False
添加回答
舉報(bào)