中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python的id()結果怎么理解

發布時間:2021-12-17 17:41:14 來源:億速云 閱讀:220 作者:iii 欄目:大數據

本篇內容主要講解“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()結果怎么理解”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金湖县| 鲁山县| 威信县| 洛宁县| 盐城市| 上林县| 驻马店市| 甘孜县| 昭觉县| 开江县| 双桥区| 平远县| 灵璧县| 香河县| 什邡市| 玉山县| 屯门区| 岳阳县| 大安市| 福安市| 玉田县| 名山县| 四会市| 保康县| 潍坊市| 奉化市| 汉源县| 屯昌县| 连平县| 调兵山市| 哈尔滨市| 泽州县| 南川市| 赣榆县| 镇远县| 通山县| 龙井市| 垣曲县| 泰安市| 比如县| 河北省|