[問題] 迴圈中想用gc處理記憶體

作者: yauhh (小y寶貝)   2014-05-21 02:33:09
嗨,新手到此拜會.
想問個問題,我有個工作需要用迴圈讀大量資料.
我想,假如在迴圈中指定了很多區域變數,這些變數空間在下一圈都直接拋棄掉嗎?
或者,我是否該在迴圈跑到一個數量的圈數,就開一次gc?
作者: apua (Apua)   2014-05-21 14:31:00
like this? ``for i in [1,2]: a=1``
作者: yauhh (小y寶貝)   2014-05-21 17:24:00
Yes. Many variables local to for loop.
作者: grtfor (哦啦啦)   2014-05-21 23:32:00
沒記錯的話,python 的gc call了,也不會馬上回收
作者: ya790206 (殘雲奪月)   2014-05-22 23:00:00
在 python,每次呼叫 gc.collect() 都會真的跑一次garbage collect。詳見CPython 原始碼Modules/gcmodule.c的 gc_collect function 。這裡說的是官方網站以c語言寫的直譯器,其他的我不知道
作者: yauhh (小y寶貝)   2014-05-23 12:09:00
那假如不用gc,迴圈中的變數會累積嗎?
作者: ya790206 (殘雲奪月)   2014-05-23 22:28:00
如果你的"不用gc"的意思是指gc.disable()來停用 gc 的話那麼你所產生的物件都不會被刪除。如果你"不用gc"指不呼叫gc.collect() ,則系統會在必要時自動呼叫gc.collect()。你不必刻意去呼叫他(除非你知道你在幹嘛)一直呼叫gc.collect()不會出事,只是一直再做沒意義的事而已
作者: yauhh (小y寶貝)   2014-05-23 23:03:00
唉,我真正在問的問題是迴圈中的變數所佔的記憶體空間,但你卻只在gc那邊繞. gc我知道啦,如果我想用就會用,但要用也要用在適當的情況. 而我的問題就是在詢問/尋找那個適當的情況而已.不要繼續在gc繞了. 我沒問gc的問題.
作者: ya790206 (殘雲奪月)   2014-05-24 11:03:00
我去年就已經看完 python gc 演算法和 vm 如何執行程式碼並不是為了回答你問題而去看程式碼。
作者: timTan (用口頭禪區分年記)   2014-05-24 18:23:00
再問清楚一點就好,何必講些失焦的話

Links booklink

Contact Us: admin [ a t ] ucptt.com