Python對象中__del__方法起作用的條件詳解
對象的__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)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
shell命令行,一鍵創(chuàng)建 python 模板文件腳本方法
下面小編就為大家分享一篇shell命令行,一鍵創(chuàng)建 python 模板文件腳本方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03Python實現(xiàn)隨機生成算術(shù)題的示例代碼
這篇文章主要為大家詳細介紹了如何利用Python實現(xiàn)隨機生成算術(shù)題的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2023-04-04學會Python數(shù)據(jù)可視化必須嘗試這7個庫
數(shù)據(jù)可視化是使用一些繪圖和圖形更詳細地理解數(shù)據(jù)的過程.最著名的庫之一是 matplotlib,它可以繪制幾乎所有您可以想象的繪圖類型.matplotlib 唯一的問題是初學者很難掌握.在本文中,我將介紹七個數(shù)據(jù)可視化庫,你可以嘗試使用它們來代替 matplotlib ,需要的朋友可以參考下2021-06-06python讀取大型csv文件的操作方法(降低內(nèi)存占用)
遇到大型的csv文件時,pandas會把該文件全部加載進內(nèi)存,從而導致程序運行速度變慢,本文提供了批量讀取csv文件、讀取屬性列的方法,減輕內(nèi)存占用情況,文中有詳細的代碼示例,需要的朋友可以參考下2024-03-03Python中NumPy的線性代數(shù)子模塊linalg詳解
這篇文章主要介紹了Python中NumPy的線性代數(shù)子模塊linalg詳解,NumPy 的線性代數(shù)子模塊linalg提供了 20 余個函數(shù),用于求解行列式、逆矩陣、特征值、特征向量,以及矩陣分解等,需要的朋友可以參考下2023-08-08Python3.6 Schedule模塊定時任務(wù)(實例講解)
下面小編就為大家?guī)硪黄狿ython3.6 Schedule模塊定時任務(wù)(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11