Python的記憶體管理

2022-04-03 14:04:52 字數 953 閱讀 7483

學習一門語言前,肯定是先學習這門語言的變數。要想深入了解這門語言,變數在記憶體中的管理尤其重要。

python中變數的定義和宣告是很隨意的,你可以在任何你想要開始使用變數的時候去定義吧,這和c有區別。而且宣告變數的時候無需指定變數型別,它的型別會在變數賦值的時候由python內部的直譯器確定。注意,python變數也需要遵循先建立賦值之後才可以使用的原則。

作為乙個優秀的程式,相信我們一定會仔細研究一門語言的變數在記憶體中是如何管理的,是否需要我們手動釋放記憶體?很幸運的是,python直譯器已經幫我們解決了這個複雜的問題。那它是怎麼做的什麼時候**那些物件呢?

python引入了乙個機制:引用計數。引用計數的意思就是說python內部記錄了物件有多少個引用。

比如下面的語句:

x=4

y=x

變數x被建立賦值為4的時候,該物件的引用計數為1。當執行y=x語句的時候,變數y指向了跟變數x同乙個物件,這時該物件的引用計數變成了2。

總結一下物件會在一下情況下引用計數加1:

1.物件被建立:x=4

2.另外的別人被建立:y=x

3.被作為引數傳遞給函式:foo(x)

4.作為容器物件的乙個元素:a=[1,x,'33']

1.乙個本地引用離開了它的作用域。比如上面的foo(x)函式結束時,x指向的物件引用減1。

2.物件的別名被顯式的銷毀:del x  ;或者del y

3.物件的乙個別名被賦值給其他物件:x=789

4.物件從乙個視窗物件中移除:mylist.remove(x)

5.視窗物件本身被銷毀:del mylist,或者視窗物件本身離開了作用域。

當記憶體中有不再使用的部分時,垃圾收集器就會把他們清理掉。它會去檢查那些引用計數為0的物件,然後清除其在記憶體的空間。當然除了引用計數為0的會被清除,還有一種情況也會被垃圾收集器清掉:當兩個物件相互引用時,他們本身其他的引用已經為0了。

Python的記憶體管理

最近在學deeplearning相關的內容,找到了deeplearning.net這個 上面的tutorial主要是介紹深度學習演算法,上面的實現是用python語言,用到的庫主要有numpy和theano。numpy大家比較熟悉了,不再細說 theano是乙個進行數學計算的庫,使用者可以更好的定義...

Python的記憶體管理

首先 記憶體管理在wiki上的定義為 記憶體管理是應用於計算機記憶體的一種資源管理形式。記憶體管理的基本要求是提供一種方法,可根據它們的請求為程式動態分配記憶體的一部分,並在不再需要時將其釋放以供重用。那麼,簡單的理解的話,記憶體管理就是控制記憶體的釋放和記憶體的分配 在看完了python官方文件後...

python的記憶體管理

1 小資料池 2 垃圾 機制 2.1 引用計數 每個物件都保留著一塊空間,來追蹤到底有多少引用指向了這個物件,如果我們程式中的乙個變數或其他物件引用了目標物件,python將會增加這個計數值 而當程式停止使用這個物件,則python會減少這個計數值。一旦計數值被減到零,python將會釋放這個物件以...