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

 更新時間:2018年11月01日 12:13:31   作者:grey_csdn   我要評論

今天小編就為大家分享一篇Python對象中__del__方法起作用的條件詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

示范代碼如下:

class Demo:

def __del__(self):

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

del obj

程序執行結果如下:

[email protected]:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

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

class Demo:

def __init__(self):

  print("calling __del__")

obj = Demo()

obj.__del__()

程序執行結果:

[email protected]:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__ 

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

如下代碼:

[email protected]NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

calling __del__

執行結果:

[email protected]:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

calling __del__

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

修改代碼驗證如下:

class Demo:

def __del__(self):

  print("calling __del__")

  del self

 

obj = Demo()

obj.__del__()

print(id(obj))

執行結果:

[email protected]:/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))

執行結果:

[email protected]:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

140568015406936

140568015406936

calling __del__

從上面結果看,猜測還是準確的。

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

相關文章

  • Python實現按照指定要求逆序輸出一個數字的方法

    Python實現按照指定要求逆序輸出一個數字的方法

    這篇文章主要介紹了Python實現按照指定要求逆序輸出一個數字的方法,涉及Python針對字符串的遍歷、判斷、輸出等相關操作技巧,需要的朋友可以參考下
    2018-04-04
  • 在Linux系統上安裝Python的Scrapy框架的教程

    在Linux系統上安裝Python的Scrapy框架的教程

    這篇文章主要介紹了在Linux系統上安裝Python的Scrapy框架的教程,Scrapy是著名的專門針對搜索引擎的爬蟲制作而研發的Python框架,需要的朋友可以參考下
    2015-06-06
  • python驗證碼識別實例代碼

    python驗證碼識別實例代碼

    這篇文章主要介紹了python驗證碼識別實例代碼,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Python和Java進行DES加密和解密的實例

    Python和Java進行DES加密和解密的實例

    下面小編就為大家分享一篇Python和Java進行DES加密和解密的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Python連接PostgreSQL數據庫的方法

    Python連接PostgreSQL數據庫的方法

    大家應該都有所了解,python可以操作多種數據庫,諸如SQLite、MySql、PostgreSQL等,這里不對所有的數據庫操作方法進行贅述,只針對目前項目中用到的PostgreSQL做一下簡單介紹,主要是Python連接PostgreSQL數據庫的方法。有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-11-11
  • Python中應該使用%還是format來格式化字符串

    Python中應該使用%還是format來格式化字符串

    這篇文章主要介紹了Python中應該使用%還是format來格式化字符串的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • python實現飛機大戰

    python實現飛機大戰

    這篇文章主要為大家詳細介紹了python實現飛機大戰游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python驗證文件是否可讀寫代碼分享

    Python驗證文件是否可讀寫代碼分享

    這篇文章主要介紹了Python驗證文件是否可讀寫代碼分享,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Python3連接MySQL(pymysql)模擬轉賬實現代碼

    Python3連接MySQL(pymysql)模擬轉賬實現代碼

    這篇文章主要介紹了Python3連接MySQL(pymysql)模擬轉賬實現代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Python列表(list)常用操作方法小結

    Python列表(list)常用操作方法小結

    這篇文章主要介紹了Python列表(list)常用操作方法小結,本文講解了常用操作方法和一些簡單代碼實例,需要的朋友可以參考下
    2015-02-02

最新評論

时时彩包赢公式0369