Dee*_*eyi 1 python memory-management
这会释放 Python 中的内存吗?
a = range(200)
a = []
Run Code Online (Sandbox Code Playgroud)
还是我必须专门做del a?
SPORTS = ['cricket', 'football']
def handle(self, *args, **options):
logger = logging.getLogger('load_articles')
for sport in self.SPORTS:
logger.info('setting sport')
self.sport = sport
self.load_articles_in_mem() #this populates the array articles
obj, created = self.create_sport()
self.create_articles_for(obj)
self.articles = []
logger.info("Articles loaded in memory %s" % len(self.articles))
Run Code Online (Sandbox Code Playgroud)
所以这里的文章从某个来源加载到内存中,当我增加SPORTS列表时,我会不断膨胀articles列表。一旦我需要的一切都完成了,我就可以清空循环内的列表。
有没有更优雅的方法来做到这一点?
我刚刚检查了 Python2.6 并创建a = range(100000000)它消耗了多达700 MBRAM。那么a = []它600 MB总共消耗了额外的1.3 GB of RAM。然后del a什么都没有改变。关闭 Python 控制台后,内存被释放。
对于 Python 3.4range不会创建任何列表 - 所以它不会消耗太多内存。我已经运行a = range(1000000000000)并且几乎没有改变内存消耗。
但后来我跑了a = [x for x in range(10000000)],它消耗了大约200 MB然后运行a = []和内存被释放。再次创建a = [x for x in range(10000000)],占用了 200 MB,然后del a释放了内存。
结论:
Py26 不会垃圾回收未使用的列表。Py27 也一样。(刚刚检查)
Py34 将垃圾收集未使用的列表并释放内存。
附注。
我已经在 Python2.6 中运行了与 Python3.4 相同的测试。结果和之前一样。内存没有释放。
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |