Python中垃圾回收和del語句詳解
Python中的垃圾回收算法是采用引用計數(shù), 當一個對象的引用計數(shù)為0時, Python的垃圾回收機制就會將對象回收
a = "larry" b = a
larry這個字符串對象, 在第一行被貼了a標簽后, 引用計數(shù)為1, 之后在第二行, 由貼上了b標簽, 此時, 該字符串對象的引用計數(shù)為
a = "larry" b = a del a
注意: 在Python語言中, del語句操作某個對象的時候, 并不是直接將該對象在內(nèi)存中刪除, 而是將該對象的引用計數(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這個字符串對象在第一行被貼上了a標簽, 此時字符串對象的引用計數(shù)為1, 接著第二行又被貼上了b標簽, 此時該字符串對象的引用計數(shù)為2, 在第三行中, del語言刪除了a變量(標簽), 在后續(xù)的print中可以看出, 內(nèi)存中實際的字符串對象并沒有被刪除, del語言只是刪除了一個變量對該字符串對象的引用, 所以對于larry這個字符串對象來說, 效果只是引用計數(shù)-1
魔法函數(shù)之__del__
類中的__del__魔法函數(shù), 支持我們自定義清理對象的邏輯, 當Python解釋器使用del語言刪除類的對象的時候, 會自動調(diào)用類中的__del__函數(shù), 我們可以對其進行重載
>>> class Ref:
...
... def __init__(self, name):
... self.name = name
...
... def __del__(self):
... print("刪除對象")
... del self.name
...
>>>
>>> r = Ref(name="larry")
>>> print(r.name)
larry
>>>
>>> del r
刪除對象
>>> >>> print(r.name) Traceback (most recent call last): File "<input>", line 1, in <module> print(r.name) NameError: name 'r' is not defined
我們可以通過重載__del__魔法函數(shù), 自己靈活控制在del 對象的時候執(zhí)行哪些善后操作
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python實現(xiàn)將MySQL數(shù)據(jù)庫表中的數(shù)據(jù)導出生成csv格式文件的方法
這篇文章主要介紹了Python實現(xiàn)將MySQL數(shù)據(jù)庫表中的數(shù)據(jù)導出生成csv格式文件的方法,涉及Python針對mysql數(shù)據(jù)庫的連接、查詢、csv格式數(shù)據(jù)文件的生成等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
Python中判斷輸入是否為數(shù)字的實現(xiàn)代碼
這篇文章主要介紹了Python中判斷輸入是否為數(shù)字的實現(xiàn)代碼,需要的朋友可以參考下2018-05-05
一篇文章徹底弄懂Python中的if?__name__?==?__main__
在Python當中如果代碼寫得規(guī)范一些,通常會寫上一句if '__name__'=='__main__:'作為程序的入口,下面這篇文章主要給大家介紹了關(guān)于如何通過一篇文章徹底弄懂Python中的if?__name__?==?__main__的相關(guān)資料,需要的朋友可以參考下2022-12-12
python中requests庫session對象的妙用詳解
這篇文章主要介紹了python中requests庫session對象的妙用詳解,具有一定參考價值,需要的朋友可以了解下。2017-10-10

