python的記憶體管理是依據物件引用次數管理的,物件被建立,分配記憶體給物件;物件引用計數為0,分配給物件的記憶體被**。
下面這些情況物件的引用計數+1:
物件被建立:a = create_object()
引用被賦值:b = a
被作為引數傳遞給函式:f(a)
作為容器物件的乙個元素:lst = [1,a]
下面這些情況物件的引用計數-1
離開作用域。比如f(a)函式結束時,a指向的物件引用減1。
引用被顯式的銷毀:del a
物件的乙個別名被賦值給其他物件:b = 1
物件從乙個容器物件中移除:lst.remove(a)
容器物件本身被銷毀:del lst。
from sys import getrefcount as count
class
test
(object):
def__del__
(self)
:print
("__del__ called!"
)def
__repr__
(self)
:return
"test object."
deff
(x):
print
(count(x)
)t = test(
)del t
程式執行的結果如下,列印的計數會比預想的多1,原因是a傳入count當引數時也算一次計數。
__del__ called!24
2324
program end.
__del__ called!
從執行結果可以知道,__del__
魔法當程式計數為0或者程式退出的時候會被呼叫。 python 記憶體分析 python記憶體管理分析
記憶體管理,對於python這樣的動態語言,是至關重要的一部分,它在很大程度上甚至決定了python的執行效率,因為在python的執行中,會建立和銷毀大量的物件,這些都涉及到記憶體的管理。小塊空間的記憶體池 在python中,許多時候申請的記憶體都是小塊的記憶體,這些小塊記憶體在申請後,很快又會被...
python 記憶體管理
記憶體管理,對於python這樣的動態語言,是至關重要的一部分,它在很大程度上甚至決定了python的執行效率,因為在python的執行中,會建立和銷毀大量的物件,這些都涉及到記憶體的管理。小塊空間的記憶體池 在python中,許多時候申請的記憶體都是小塊的記憶體,這些小塊記憶體在申請後,很快又會被...
Python記憶體管理
1.引用和物件 python是動態型別的語言 參考動態型別 物件與引用分離。賦值語句 a 1 中,整數1為乙個物件。而a是乙個引用。利用賦值語句,引用a指向物件1。python的內建函式id 它用於返回物件的身份 identity 其實,這裡所謂的身份,就是該物件的記憶體位址。a 1 print i...