1
如果我創建了一個龐大的列表/陣列,說將重新分配一個巨大的列表/數組會導致內存泄漏?
a=range(1000000000)
or
a=numpy.ones(100000000)
然後我重新分配爲:
a=1
這種重新分配後,將先前的巨大列表或數組被自動刪除,或者,如果它在一個循環內部有潛在的記憶吃掉?
如果我創建了一個龐大的列表/陣列,說將重新分配一個巨大的列表/數組會導致內存泄漏?
a=range(1000000000)
or
a=numpy.ones(100000000)
然後我重新分配爲:
a=1
這種重新分配後,將先前的巨大列表或數組被自動刪除,或者,如果它在一個循環內部有潛在的記憶吃掉?
它會像平常一樣收集垃圾,可能需要一點點收穫。但它不會造成內存泄漏(或者它不應該,如果它確實存在,應該報告numpy模塊中存在一個錯誤)。
+1正確並且不會陷入假設引用計數的陷阱。例如:'numpypy'還遠遠沒有完成,但示例代碼已經可以在PyPy下運行(希望在不久的將來,真正的程序也是如此)。 – delnan 2012-04-23 18:13:30
是否至少有cpython緩存可用整數和浮點數?請參閱:http://effbot.org/pyfaq/why-doesnt-python-release-the-memory-when-i-delete-a-large-object.htm – 2012-04-23 18:39:52
@RolandSmith是的,但numpy數組實際上並不包含數以百萬計的Python對象(這就是爲什麼它們儘可能高效,而不是定期列出更快的條紋)。 – delnan 2012-04-24 12:38:40