溫馨提示×

溫馨提示×

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

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

Python對象中__del__方法起作用的條件詳解

發(fā)布時間:2020-10-13 10:22:18 來源:腳本之家 閱讀:176 作者:grey_csdn 欄目:開發(fā)技術(shù)

對象的__del__是對象在被gc消除回收的時候起作用的一個方法,它的執(zhí)行一般也就意味著對象不能夠繼續(xù)引用。

示范代碼如下:

class Demo:

def __del__(self):

  print("calling __del__")
 
obj = Demo()

del obj

程序執(zhí)行結(jié)果如下:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

但是,這并不是讓__del__執(zhí)行的唯一方式。其實,這個方法也可以直接調(diào)用。測試代碼如下:

class Demo:

def __init__(self):

  print("calling __del__")

obj = Demo()

obj.__del__()

程序執(zhí)行結(jié)果:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__ 

但是,這樣的執(zhí)行很多時候并不能夠保證垃圾回收的正常執(zhí)行。

如下代碼:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

calling __del__

執(zhí)行結(jié)果:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

calling __del__

推測:上面的刪除方法觸發(fā)了兩次刪除,但是由于引用關(guān)系,刪除銷毀其實沒有實現(xiàn)。

修改代碼驗證如下:

class Demo:

def __del__(self):

  print("calling __del__")

  del self

 

obj = Demo()

obj.__del__()

print(id(obj))

執(zhí)行結(jié)果:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

140726800222040

calling __del__

從上面看來,其實主要還有對對象的引用,這個銷毀的動作還是需要等待對象引用沒有了以后才能夠完成。進一步驗證代碼:

class Demo:

def __del__(self):

  print("calling __del__")

  del self

 

obj = Demo()

obj.__del__()

print(id(obj))

print(id(obj))

執(zhí)行結(jié)果:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

140568015406936

140568015406936

calling __del__

從上面結(jié)果看,猜測還是準確的。

以上這篇Python對象中__del__方法起作用的條件詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節(jié)

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

AI