考虑字典词典:
bigDict = { 'user1': userDict1, 'user2': userDict2 }
假设它包含数百万用户,我想在处理完所有内容后释放内存。
以下是否足够:
del bigDict
或者我需要做类似的事情:
for userId, userDict in bigDict.iteritems():
del userDict
答案 0 :(得分:0)
如果您对词典的唯一引用位于bigDict
,则只需删除它即可触发垃圾收集器。如果外面有引用,那么使用你的循环删除它们中的每一个都不会做任何事情,因为del
只是意味着"减少一个引用计数"和 if和only如果计数器变为零,则该对象将被删除。
确保释放对象的最简单方法是在可能的情况下在闭包中创建和使用它。所以你有一个函数,在body中创建大字典,处理它,一旦完成,返回一组值。这样你就可以确定没有迷路参考。当然,在大多数实际目的中,这实际上是不可能的。
必须注意的是,如果同时有许多小对象存活,则它们的内存不会返回到操作系统,而是作为新对象的池保存。 (这种行为在Python 3中得到了部分改进)。如果内存管理很关键,您可能希望使用数组对象,因此它们不再是 small 对象(并且在此过程中节省了一些开销)。