溫馨提示×

溫馨提示×

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

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

id()在python中返回的對象地址究竟是什么地方

發(fā)布時間:2020-12-14 09:39:55 來源:億速云 閱讀:761 作者:小新 欄目:編程語言

小編給大家分享一下id()在python中返回的對象地址究竟是什么地方,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

在函數(shù)返回時有一個身份的識別,就像我們寄包裹的時候都有一個單號,便于大家隨時跟蹤它的進(jìn)度。我們今天要講的內(nèi)置函數(shù)id()同樣可以看作是用來進(jìn)行身份識別的。那么我們進(jìn)一步思考,id()最后返回的地址究竟是什么地方。

1.用于返回對象的身份(identity)。其實(shí),這里所謂的身份,就是該對象的內(nèi)存地址。

a = 1
print(id(a))
print(hex(id(a)))

在我的計(jì)算機(jī)上,它們返回的是:

11246696 '0xab9c68'

分別為內(nèi)存地址的十進(jìn)制和十六進(jìn)制表示。

在Python中,整數(shù)和短小的字符,Python都會緩存這些對象,以便重復(fù)使用。當(dāng)我們創(chuàng)建多個等于1的引用時,實(shí)際上是讓所有這些引用指向同一個對象。

a = 1
b = 1
 
print(id(a))
print(id(b))

上面程序返回

11246696
11246696

可見a和b實(shí)際上是指向同一個對象的兩個引用。

2.Python的內(nèi)置函數(shù)id()返回的其實(shí)是變量的內(nèi)存地址

c = []
#這里定義了一個新的變量[],給它分配了內(nèi)存空間,如題是82482056,c作為一個名稱指向內(nèi)存空間82482056
d = []
#這里定義了一個新的變量[],給它分配了內(nèi)存空間,如題是82452296,d作為一個名稱指向內(nèi)存空間82452296
e = d
#注意,這里并沒有定義新的變量,沒有分配新的內(nèi)存空間,僅僅e作為一個名稱指向了和d相同的目標(biāo),即內(nèi)存空間82452296
print(id([]))
#注意,這里又定義了一個新的變量[],給它分配了內(nèi)存空間,如題是82481544。但是,在這一句執(zhí)行完之后,并沒有名稱指向內(nèi)存空間82481544,也就是說,之后將無法再獲取到這個變量(Python沒有C語言的內(nèi)存指針機(jī)制),這個時候,根據(jù)Python的垃圾回收機(jī)制,這個變量會被銷毀,內(nèi)存空間82481544將被釋放
print(id([]))
#這里又定義了一個新的變量[],給它分配了內(nèi)存空間,根據(jù)內(nèi)存空間分配算法,一般來說還是82481544,內(nèi)存空間分配算法這個就不展開說了。在這一句執(zhí)行完之后,也是并沒有名稱指向內(nèi)存空間82481544,這個變量會被銷毀,內(nèi)存空間3將被釋放print(id(c))
print(id(d))
print(id(e))
#這三句分別輸出它們指向的內(nèi)存地址

以上是“id()在python中返回的對象地址究竟是什么地方”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI