在Python中,每個整數似乎都有一個從438開始的10位數的id。我試圖找到一個與id相同的數字。我寫了一個簡單的代碼來找到該號碼:每當我嘗試運行該程序時,都會改變它的id號碼嗎?
for i in range(4380000000,4390000000):
if i==id(i):
print(i)
else:
pass
當我第一次運行這個時,我沒有這樣的號碼。然後我第二次運行它,但仍然沒有編號。
當我跑了第三次,我得到了一個號碼:4384404848
然後我檢查是否id(4384404848)==4384404848
和我False
。
爲什麼Python返回一個不等於它的id的數字?或者當程序運行和停止時,同一個號碼是否有不同的ID?
(編輯:假設「每個整數似乎已經從438開始的10位ID」是錯誤的。)
我不認爲這是真的。如果我輸入'id(2)',我會得到'4297636384'。現在,如果我退出Python並再次輸入'id(2)',我會得到相同的編號。 –
@AaryanDewan這是因爲CPython中的小整數 - 特別是範圍在'-5'到'256' - 被緩存。所以'2'的id認爲每個程序都會指向在程序啓動之前創建的同一個'2' CPython。 –
如果您好奇,請點擊以下鏈接:[Python 3 Docs](https://docs.python.org/3/c-api/long.html#c.PyLong_FromLong)。 請注意提到的部分:'當前實現爲-5到256之間的所有整數保留一個整型對象數組,當您在該範圍內創建一個int時,您實際上只返回對現有對象的引用' –