Python中垃圾回收和del語(yǔ)句詳解
Python中的垃圾回收算法是采用引用計(jì)數(shù), 當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)為0時(shí), Python的垃圾回收機(jī)制就會(huì)將對(duì)象回收
a = "larry" b = a
larry這個(gè)字符串對(duì)象, 在第一行被貼了a標(biāo)簽后, 引用計(jì)數(shù)為1, 之后在第二行, 由貼上了b標(biāo)簽, 此時(shí), 該字符串對(duì)象的引用計(jì)數(shù)為
a = "larry" b = a del a
注意: 在Python語(yǔ)言中, del語(yǔ)句操作某個(gè)對(duì)象的時(shí)候, 并不是直接將該對(duì)象在內(nèi)存中刪除, 而是將該對(duì)象的引用計(jì)數(shù)-1
>>> a = "larry" >>> b = a >>> del a >>> id(b) 4572141808 >>> id(a) Traceback (most recent call last): File "<input>", line 1, in <module> id(a) NameError: name 'a' is not defined
從以上示例中可以看出, larry這個(gè)字符串對(duì)象在第一行被貼上了a標(biāo)簽, 此時(shí)字符串對(duì)象的引用計(jì)數(shù)為1, 接著第二行又被貼上了b標(biāo)簽, 此時(shí)該字符串對(duì)象的引用計(jì)數(shù)為2, 在第三行中, del語(yǔ)言刪除了a變量(標(biāo)簽), 在后續(xù)的print中可以看出, 內(nèi)存中實(shí)際的字符串對(duì)象并沒(méi)有被刪除, del語(yǔ)言只是刪除了一個(gè)變量對(duì)該字符串對(duì)象的引用, 所以對(duì)于larry這個(gè)字符串對(duì)象來(lái)說(shuō), 效果只是引用計(jì)數(shù)-1
魔法函數(shù)之__del__
類(lèi)中的__del__魔法函數(shù), 支持我們自定義清理對(duì)象的邏輯, 當(dāng)Python解釋器使用del語(yǔ)言刪除類(lèi)的對(duì)象的時(shí)候, 會(huì)自動(dòng)調(diào)用類(lèi)中的__del__函數(shù), 我們可以對(duì)其進(jìn)行重載
>>> class Ref: ... ... def __init__(self, name): ... self.name = name ... ... def __del__(self): ... print("刪除對(duì)象") ... del self.name ... >>> >>> r = Ref(name="larry") >>> print(r.name) larry >>> >>> del r
刪除對(duì)象
>>> >>> print(r.name) Traceback (most recent call last): File "<input>", line 1, in <module> print(r.name) NameError: name 'r' is not defined
我們可以通過(guò)重載__del__魔法函數(shù), 自己靈活控制在del 對(duì)象的時(shí)候執(zhí)行哪些善后操作
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python 密碼學(xué)示例——?jiǎng)P撒密碼的實(shí)現(xiàn)
這篇文章主要介紹了python 密碼學(xué)示例——?jiǎng)P撒密碼的實(shí)現(xiàn),幫助大家更好的利用python處理密碼,感興趣的朋友可以了解下2020-09-09Python實(shí)現(xiàn)GUI學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)GUI學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01使用FFmpeg來(lái)無(wú)損壓縮視頻文件的操作方法
FFmpeg是業(yè)內(nèi)有名的開(kāi)源圖像視頻處理程序,在許多視頻剪輯軟件、圖像處理軟件中,都使用的FFmpeg,還有比如OBS這樣的導(dǎo)播軟件里面也使用了FFmpeg,FFmpeg的功能十分強(qiáng)大,遠(yuǎn)不止視頻壓縮的功能,本文介紹使用FFmpeg來(lái)無(wú)損壓縮視頻文件的操作方法,感興趣的朋友一起看看吧2023-12-12python 簡(jiǎn)單的繪圖工具turtle使用詳解
這篇文章主要介紹了python 簡(jiǎn)單的繪圖工具turtle使用詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06基于騰訊云服務(wù)器部署微信小程序后臺(tái)服務(wù)(Python+Django)
這篇文章主要介紹了基于騰訊云服務(wù)器部署微信小程序后臺(tái)服務(wù)(Python+Django),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05跟老齊學(xué)Python之關(guān)于類(lèi)的初步認(rèn)識(shí)
這篇文章主要介紹了Python中關(guān)于類(lèi)的一些術(shù)語(yǔ)解釋?zhuān)m然有些枯燥,但是要了解類(lèi)的話,這些內(nèi)容是必須的2014-10-10