Python del方法 引用計數

2021-09-29 14:52:44 字數 1013 閱讀 9713

物件所有引用徹底消除後進行預設的操作

del方法
class

dog:

def__del__

(self)

:print

('--------物件清除----------'

)dog1 = dog(

)dog2 = dog1

del dog1 #此時並不會呼叫del方法

print

('-----------1------------'

)del dog2 #dog1物件徹底清除,此時呼叫del方法

print

('-----------2------------'

)

>>

>--

----

----

-1--

----

----

----

----

--物件清除---

----

----

----

----

-2--

----

----

--

引用計數
import sys

sys.getrefcount(

)#返回結果比實際大1

import sys

classt:

pass

t = t(

)#建立乙個物件

tt = t #指向新物件t

count1 = sys.getrefcount(t)

print

(count1)

del tt

count2 = sys.getrefcount(t)

print

(count2)

>>

>

32

自動引用計數

每當你產生乙個物件,arc分配一大塊控制項去儲存這個物件。除此之外,當乙個物件是不在需要,arc 將會收回這個例項物件所佔的空間。如果乙個物件的空間被釋放掉,但是你任然通過物件的引用呼叫方法或者屬性,你的程式將要崩潰。為了不讓物件被釋放掉 arc將會追蹤有多少屬性 常量 變數正在引用這個物件。只要有...

引用計數 copy on write

拷貝通常分為值拷貝也叫淺拷貝和深拷貝,當拷貝方式為淺拷貝時就會有以下兩個問題 1 當需要調析構函式時,會出現同一塊空間被析構兩次的情況 2 如果是對指標的淺拷貝,會讓兩個指標同時管理同一塊空間,當乙個指針對這塊空間進行修改時,會影響到另外乙個指標。通過引用計數加寫時拷貝可以有效地解決這些問題。引用計...

自動引用計數

使用弱引用解決迴圈強引用 如果兩個變數屬性都可以設定為nil,那麼就用弱引用來設定其中乙個屬性來解決迴圈強引用。class person weak var apartment apartment?deinit class apartment deinit var aperson person?per...