2016-05-17 64 views
1

Python如何處理內存分配?作爲開發人員,在使用Python創建大型應用程序時需要考慮的內存分配是否與內存分配有關?還是我應該相信Python以最佳方式管理這些內存?python如何處理內存分配?

+1

[閱讀文檔](https://docs.python.org/3/c-api/memory.html) – CoryKramer

+0

文檔說「Python內存管理器」管理內存,但不回答問題(或者至少不在該部分中)關於開發者是否需要考慮什麼。我猜想關鍵的一點是要確保多餘的物體能夠被垃圾收集等。我將回答這個問題給一個比我更瞭解這個問題的人。 – neil

+0

尼爾是對的,我讀過文檔,但我不確定自己是否應該做任何事情。 –

回答

3

Python會爲您處理分配,但在某些情況下,您應該顯式釋放以停止Python或更廣泛的系統在內存上運行不足。 del x從附加的任何數據中刪除名稱x,並且如果數據引用計數變爲零,那麼當下一次調用垃圾回收器時,該數據有資格進行垃圾回收。在程序失敗之前肯定會發生這種情況,因爲它的內存不足。

您可以顯式調用垃圾回收器(標準Python模塊gc)。 gc.collect()告訴它立即做一個完整的收集,如果你不希望它隨機發生在隨後的時間。你可以做很多其他事情來調整其行爲以滿足程序的需求。例如,您可以禁用並重新啓用它,其中一段代碼的實時行爲很重要,其臨時對象的流失很輕微。有關更多信息,請參閱https://docs.python.org/3/library/gc.html

對象的垃圾收集可能發生在重要的外部實體整理時。最簡單的例子是f=open("some.file" ,"w")。如果您不使用with或調用f.close(),則文件保持打開狀態,直到程序終止或者f被垃圾收集爲止。

你需要知道嗎?通常不需要像Gbytes那樣備用的單用戶系統,就像普通的臺式電腦一樣。也許是的,如果你正在編寫Python代碼來作爲一個難以壓制的服務器上的進程集合中的一個元素來運行。您不明確釋放的內存可能是某些其他進程需要的內存。

+0

謝謝你的回答,這正是我想要的。 –

相關問題