【发布时间】:2011-04-25 12:59:10
【问题描述】:
我在 Python 中有一个相对较大的字典,并且希望不仅能够从中删除项目,而且实际上 reclaim 从我的程序中的这些删除中恢复内存。我遇到了一个问题,虽然我从字典中删除了项目,甚至手动运行了垃圾收集器,但 Python 似乎并没有释放内存本身。
一个简单的例子:
>>> tupdict = {}
# consumes around 2 GB of memory
>>> for i in xrange(12500000):
... tupdict[i] = (i,i)
...
# delete over half the entries, no drop in consumed memory
>>> for i in xrange(7500000):
... del tupdict[i]
...
>>> import gc
# manually garbage collect, still no drop in consumed memory after this
>>> gc.collect()
0
>>>
我想正在发生的事情是,虽然条目被删除并且垃圾收集器运行,但 Python 并没有继续调整字典的大小。我的问题是,有什么简单的方法可以解决这个问题,还是我可能需要更认真地重新考虑如何编写程序?
【问题讨论】:
-
你是如何测量内存消耗的?
-
没什么花哨的 - Ubuntu 中的系统监视器
-
在 Windows XP SP3 上的 Python 2.6.5 上运行
gc.collect()似乎释放了大约 50% 的内存 -
@Nick T:Windows 将释放的进程内存释放回操作系统以供使用,Linux 不会,因此这是预期的行为。他们俩都在为自己的目的做“正确的事”。