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為單位的,如果想輸出可讀的可以加上...