您好,登錄后才能下訂單哦!
本篇內容主要講解“Python的id()結果怎么理解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python的id()結果怎么理解”吧!
曾經有同學問我 id 函數的問題,為什么同樣的列表內容 id 值卻不一樣,而寫了一樣的數字 id 值也一樣,有時候就又不一樣了?
In [51]: a = [1,2,3]
In [52]: b=[1,2,3]
In [53]: id(a)
Out[53]: 140424256381640
In [54]: id(b)
Out[54]: 140424256004872
In [55]: a=1
In [56]: b=1
In [57]: id(a), id(b)
Out[57]: (4454569376, 4454569376)
In [58]: a=1000
In [59]: b=1000
In [60]: id(a), id(b)
Out[60]: (140424243121552, 140424243118928)
其實關于這個問題,官方文檔的常見問答里給過一段解釋:
id() 返回一個整數,該整數在對象的生命周期內保證是唯一的。因為在 CPython 中,這是對象的內存地址,所以經常發生在從內存中刪除對象之后,下一個新創建的對象被分配在內存中的相同位置。這個例子說明了這一點:
>>>id(1000)
13901272
>>>id(2000)
13901272
這兩個 id 屬于之前創建的不同整數對象,并在執行 id() 調用后立即刪除。要確保要檢查其 id 的對象仍處于活動狀態,請創建對該對象的另一個引用:
>>>a = 1000; b = 2000
>>>id(a)
13901272
>>>id(b)
13891296
這里通過內存與對象的關系解決了一部分問題,我們最上面的問題還沒有完全解決,下面請看 DE8UG 的進一步解釋。
不管是字符串,數字,列表等等其他對象,最終所有數據都要在內存里有自己的位置的。一般來說,我們只需要知道內存地址就能取到具體數據了,也就是 id 后面自己處理的內存問題,直觀看就是不同數據對象的 id 的值不一樣了。有一點不一樣的是,python 底層 c 語言代碼對一定數字范圍的地址做了緩存,這個范圍內看到的 id 值一樣,參考:https://docs.python.org/3/c-api/long.html#c.PyLong_FromLong:
The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object.
簡單翻譯就是:在-5 到 256 這個范圍內的整數,會直接引用已經存在的對象,所以地址相同。
下面我們分別用兩個臨界值做一個測試:
In [62]: a=-5
In [63]: b=-5
In [64]: id(a), id(b)
Out[64]: (4454569184, 4454569184)
In [65]: b=-6
In [66]: a=-6
In [67]: id(a), id(b)
Out[67]: (140424243121904, 140424243121552)
In [68]: a=256
In [69]: b=256
In [70]: id(a), id(b)
Out[70]: (4454577536, 4454577536)
In [71]: a=257
In [72]: b=257
In [73]: id(a), id(b)
Out[73]: (140424253951760, 140424253950320)
到此,相信大家對“Python的id()結果怎么理解”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。