python id 和 is 大揭秘

2021-10-07 08:37:44 字數 2026 閱讀 6414

id(object)具有不重疊生命週期的兩個物件可能具有相同的id

不重疊的生命週期:當物件被建立時,python內部機制會為其分配記憶體空間。

如果在物件占用記憶體期間,建立另乙個物件,系統又會為新的物件分配新的記憶體空間,那麼它們的生命週期就是重疊的(因為同一時間裡它們都占用著記憶體空間——占用記憶體的時間即為生命週期)

x is y: 當且僅當x和y是同一物件時才為true 。使用該功能確定物件的身份

id(object)is比較的都是記憶體位址

例項 a

classa:

pass

classb:

pass

print(id

(a())==

id(b())

)#true

print(id

(a()))

#2872235831984

print(id

(b()))

#2872235831816

兩個不同的類a和類b, 記憶體位址不一樣, 為什麼id(a()) == id(b())

classa:

def__init__

(self)

:print

('a init'

)def

__del__

(self)

:print

('a delete'

)classb:

def__init__

(self)

:print

('b init'

)def

__del__

(self)

:print

('b delete'

)print(id

(a())==

id(b())

)'''

a init

a delete

b init

b delete

true

'''

解釋:

物件的id值僅僅在物件的生命週期內唯一. 在物件被銷毀之後, 或被建立之前, 其他物件可以具有相同的id值

如果物件從記憶體釋放,那麼建立另乙個物件時,它們的生命週期就是不重疊的,那麼分配給前乙個物件的記憶體空間就可能被復用,也就會造成不同的物件引用了同乙個 id

綜上,物件銷毀的順序是造成所有不同之處的原因

例項 b

classa:

pass

print

(a()

is a())

#false

print(id

(a())==

id(a())

)#true

a() is a()不等, 為什麼id(a()) == id(a())相等?

classa:

def__init__

(self)

:print

('init'

)def

__del__

(self)

:print

('delete'

)print

(a()

is a())

print

('----------------'

)print(id

(a())==

id(a())

)'''

init

init

delete

delete

false

----------------

init

delete

init

delete

true

'''解釋:

正如你所看到的, 物件銷毀的順序是造成所有不同之處的原因.

A 演算法大揭秘

24 0xff color 000000 font size medium a 演算法大揭秘 原文 http www.gamedev.net reference articles article2003.asp 數碼電子書 a 原理講解 http www.gotoread.com s e vo 55...

手機CPU大揭秘

cpu 是central processing unit的英文縮寫,一般由邏輯運算單元 控制單元和儲存單元組成。手機cpu簡單來說就是 處理器,所謂 處理器,就是它的核心部分 屬於邏輯部分 手機開機和執行其他工作時候,都是由 處理器下達命令,控制著各個元件工作,當然開機需要晶振提供頻率訊號才能執行,...

Linux free 命令大揭秘

2.buffers cache 解析 3.swap 解析 free是乙個可以為我們提供linux機器可用ram 記憶體 很有價值的乙個常用命令,很多linux新手或者運維人員會誤解它,讓我們一起來揭開它的神秘面紗吧!free的輸出結果如下,預設表示這些數字都是以kb為單位的,如果想輸出可讀的可以加上...