我在Python中有一个相对较大的字典,希望能够不仅删除其中的项,而且实际上从程序中回收这些删除的内存。我遇到了一个问题,即使我从字典中删除了项并手动运行了垃圾回收器,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不会继续调整字典的大小。我的问题是,是否有任何简单的方法来解决这个问题,还是我需要认真重新考虑如何编写我的程序?
gc.collect()
似乎可以释放大约50%的内存。 - Nick T