溫馨提示×

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

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

深入淺析Python中的__del__析構(gòu)函數(shù)

發(fā)布時(shí)間:2020-11-20 14:40:09 來(lái)源:億速云 閱讀:300 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

今天就跟大家聊聊有關(guān)深入淺析Python中的__del__析構(gòu)函數(shù),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

析構(gòu)函數(shù)__del__定義:在類里定義,如果不定義,Python 會(huì)在后臺(tái)提供默認(rèn)析構(gòu)函數(shù)。

析構(gòu)函數(shù)__del__調(diào)用:

A、使用del 顯式的調(diào)用析構(gòu)函數(shù)刪除對(duì)象時(shí):del對(duì)象名;

        class Foo:
          def __init__(self,x):
            self.x=x
          def __del__(self): #在對(duì)象資源被釋放時(shí)觸發(fā)
            print('-----del------')
            print(self)
        f=Foo(100000)
        del f

B、當(dāng)對(duì)象在某個(gè)作用域中調(diào)用完畢,跳出其作用域的同時(shí)析構(gòu)函數(shù)也會(huì)被調(diào)用一次,這樣可以用來(lái)釋放內(nèi)存空間。

class Foo:
  def __init__(self,x):
    self.x=x
  def __del__(self): #在對(duì)象資源被釋放時(shí)觸發(fā)
    print('-----del------')
    print(self)
f=Foo(100000)
time.sleep(5) #time.sleep(5)執(zhí)行完后,自動(dòng)調(diào)用__del__()

注意:__del__只是刪除了對(duì)象的引用,比如上面del f 只是f對(duì)象不再執(zhí)行實(shí)例數(shù)據(jù)的存儲(chǔ)空間了,實(shí)例數(shù)據(jù)并沒(méi)有被刪除,刪除實(shí)例數(shù)據(jù)需要python本身的垃圾回收機(jī)制;

垃圾回收機(jī)制

Python 采用垃圾回收機(jī)制來(lái)清理不再使用的對(duì)象;Python 提供gc模塊釋放不再使用的對(duì)象,Python 采用‘引用計(jì)數(shù)' 的算法方式來(lái)處理回收,

即:當(dāng)某個(gè)對(duì)象在其作用域內(nèi)不再被其他對(duì)象引用的時(shí)候,Python 就自動(dòng)清除對(duì)象;

Python 的函數(shù)collect()可以一次性收集所有待處理的對(duì)象(gc.collect())

看完上述內(nèi)容,你們對(duì)深入淺析Python中的__del__析構(gòu)函數(shù)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

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

AI