Python的記憶體管理

來源:互聯網
上載者:User
學習一門語言前,肯定是先學習這門語言的變數。要想深入瞭解這門語言,變數在記憶體中的管理尤其重要。

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

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

  Python引入了一個機制:引用計數。引用計數的意思就是說Python內部記錄了對象有多少個引用。

引用計數增加情況

比如下面的語句:

x=4y=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了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.