python的垃圾回收机制和析构函数__del__
析構(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=xdef __del__(self): #在對(duì)象資源被釋放時(shí)觸發(fā)print('-----del------')print(self) f=Foo(100000) del fB、當(dāng)對(duì)象在某個(gè)作用域中調(diào)用完畢,跳出其作用域的同時(shí)析構(gòu)函數(shù)也會(huì)被調(diào)用一次,這樣可以用來(lái)釋放內(nèi)存空間。
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' class Foo:def __init__(self,x):self.x=xdef __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())
總結(jié)
以上是生活随笔為你收集整理的python的垃圾回收机制和析构函数__del__的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python:__slots__()方法
- 下一篇: python中lambda以及与filt