Python語言默認采用的垃圾收集機制是參考計數法,本文詳細的介紹了Python中垃圾回收和del陳述句詳解,對大家的學習或者作業具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
Python中的垃圾回收演算法是采用參考計數, 當一個物件的參考計數為0時, Python的垃圾回識訓制就會將物件回收
https://tieba.baidu.com/p/6575202861
a = "larry"
b = a
https://www.douban.com/group/topic/169020545/ 馬蜂窩刷粉絲
larry這個字串物件, 在第一行被貼了a標簽后, 參考計數為1, 之后在第二行, 由貼上了b標簽, 此時, 該字串物件的參考計數為
a = "larry"
b = a
del a
注意: 在Python語言中, del陳述句操作某個物件的時候, 并不是直接將該物件在記憶體中洗掉, 而是將該物件的參考計數-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標簽, 此時字串物件的參考計數為1, 接著第二行又被貼上了b標簽, 此時該字串物件的參考計數為2, 在第三行中, del語言洗掉了a變數(標簽), 在后續的print中可以看出, 記憶體中實際的字串物件并沒有被洗掉, del語言只是洗掉了一個變數對該字串物件的參考, 所以對于larry這個字串物件來說, 效果只是參考計數-1
魔法函式之__del__
類中的__del__魔法函式, 支持我們自定義清理物件的邏輯, 當Python解釋器使用del語言洗掉類的物件的時候, 會自動呼叫類中的__del__函式, 我們可以對其進行多載
>>> 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__魔法函式, 自己靈活控制在del 物件的時候執行哪些善后操作
內容就以上怎么多,最后給大家推薦一個口碑不錯的公眾號【程式員學府】,這里有很多的老前輩學習
技巧,學習心得,面試技巧,職場經歷等分享,更為大家精心準備了零基礎入門資料,實戰專案資料,
每天都有程式員定時講解Python技術,分享一些學習的方法和需要留意的小細節
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/165609.html
標籤:Python
