Python對(duì)象中__del__方法起作用的條件詳解
對(duì)象的__del__是對(duì)象在被gc消除回收的時(shí)候起作用的一個(gè)方法,它的執(zhí)行一般也就意味著對(duì)象不能夠繼續(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í)行的唯一方式。其實(shí),這個(gè)方法也可以直接調(diào)用。測(cè)試代碼如下:
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í)行很多時(shí)候并不能夠保證垃圾回收的正常執(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__
推測(cè):上面的刪除方法觸發(fā)了兩次刪除,但是由于引用關(guān)系,刪除銷毀其實(shí)沒有實(shí)現(xiàn)。
修改代碼驗(yà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__
從上面看來(lái),其實(shí)主要還有對(duì)對(duì)象的引用,這個(gè)銷毀的動(dòng)作還是需要等待對(duì)象引用沒有了以后才能夠完成。進(jìn)一步驗(yàn)證代碼:
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é)果看,猜測(cè)還是準(zhǔn)確的。
以上這篇Python對(duì)象中__del__方法起作用的條件詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Django網(wǎng)絡(luò)框架之創(chuàng)建虛擬開發(fā)環(huán)境操作示例
這篇文章主要介紹了Django網(wǎng)絡(luò)框架之創(chuàng)建虛擬開發(fā)環(huán)境操作,簡(jiǎn)單描述了虛擬開發(fā)環(huán)境的概念、功能,并分析了使用venv與virtualenv安裝虛擬環(huán)境相關(guān)操作技巧,需要的朋友可以參考下2019-06-06
解決python3捕獲cx_oracle拋出的異常錯(cuò)誤問題
今天小編就為大家分享一篇解決python3捕獲cx_oracle拋出的異常錯(cuò)誤問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
python 隨機(jī)密碼生成器的實(shí)現(xiàn)示例
隨機(jī)密碼生成器是一種非常有用的工具,它可以幫助我們生成隨機(jī)的、復(fù)雜的密碼,提高我們的賬戶安全性,本文就來(lái)介紹一下python 隨機(jī)密碼生成器的實(shí)現(xiàn)示例,感興趣的可以了解一下2023-11-11
使用python?matplotlib畫折線圖實(shí)例代碼
Matplotlib是一個(gè)Python工具箱,用于科學(xué)計(jì)算的數(shù)據(jù)可視化,下面這篇文章主要給大家介紹了關(guān)于如何使用python?matplotlib畫折線圖的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
tensor.squeeze函數(shù)和tensor.unsqueeze函數(shù)的使用詳解
本文主要介紹了tensor.squeeze函數(shù)和tensor.unsqueeze函數(shù)的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
python3使用flask編寫注冊(cè)post接口的方法
今天小編就為大家分享一篇python3使用flask編寫注冊(cè)post接口的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
Python安裝Selenium報(bào)錯(cuò)解決之全方位排錯(cuò)指南
pip是一個(gè)安裝Python包的管理工具,很多功能強(qiáng)大、使用方便的Python框架、插件、工具等,都是通過(guò)pip來(lái)進(jìn)行安裝的,這篇文章主要給大家介紹了關(guān)于Python安裝Selenium報(bào)錯(cuò)解決之全方位排錯(cuò)的相關(guān)資料,需要的朋友可以參考下2024-08-08
Python實(shí)現(xiàn)微信好友數(shù)據(jù)爬取及分析
這篇文章會(huì)基于Python對(duì)微信好友進(jìn)行數(shù)據(jù)分析,這里選擇的維度主要有:性別、頭像、簽名、位置,主要采用圖表和詞云兩種形式來(lái)呈現(xiàn)結(jié)果,其中,對(duì)文本類信息會(huì)采用詞頻分析和情感分析兩種方法,感興趣的小伙伴可以了解一下2021-12-12
python 輸入字符串生成所有有效的IP地址(LeetCode 93號(hào)題)
這篇文章主要介紹了python 生成所有有效的IP地址的方法,幫助大家解答題目,學(xué)習(xí)python,感興趣的朋友可以了解下2020-10-10
如何關(guān)掉pycharm中的python console(圖解)
本文通過(guò)圖文并茂的形式給大家介紹了如何關(guān)掉pycharm中的python console,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10

