python如何進行記憶體管理

flynike發表於2021-09-11

banner90.png

關於首先python進行記憶體管理就不得不提到Python直譯器在何種情況下會釋放變數的記憶體。Python引用了記憶體計數這一簡單的計數來控制。當一個變數的引用計數為0的時候,就會被直譯器回收。當然在互動模式下,記憶體不會馬上釋放,重新啟動直譯器就會釋放了。

下面是引用計數的知識:

1) 增加引用計數 當物件被建立並(將其引用)賦值給變數時,該物件的引用計數被設定為1。

物件的引用計數增加的情況:

物件被建立:x = 3.14

另外的別名被建立:y = x

被作為引數傳遞給函式(新的本地引用):foobar(x)

成為容器物件的一個元素:myList = [123, x, 'xyz']

2) 減少引用計數 物件的引用計數減少的情況:

一個本地引用離開了其作用範圍。如foobar()函式結束時

物件的別名被顯式銷燬:del y

物件的一個別名被賦值給其他物件:x = 123

物件被從一個視窗物件中移除:myList.remove(x)

視窗物件本身被銷燬:del myList

3) del語句 Del語句會刪除物件的一個引用,它的語法如下:del obj[, obj2[, ...objN]]

例如,在上例中執行del y會產生兩個結果:

從現在的名稱空間中刪除y

x的引用計數減1

下面我們來試驗一下

import sys
 
x = 3.14
print("原始引用值:", sys.getrefcount(x))
y = x
print("被y引用後:", sys.getrefcount(x))
 
x = 4.0
print("重新賦值後:", sys.getrefcount(x))
 
del y
print("刪除y引用後:", sys.getrefcount(x))
原始引用值: 3
被y引用後: 4
重新賦值後: 3
刪除y引用後: 3

關於python記憶體相關文章推薦閱讀:

(推薦作業系統:windows7系統、Python 3.9.1,DELL G3電腦。)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2618/viewspace-2829869/,如需轉載,請註明出處,否則將追究法律責任。

相關文章