1

考虑一个字典字典:

bigDict = { 'user1': userDict1, 'user2': userDict2 } 

假设它包含数百万用户,我想在处理完整个事情后释放内存。

以下是否足够:

del bigDict

还是我需要做类似的事情:

for userId, userDict in bigDict.iteritems():
    del userDict
4

1 回答 1

1

如果对您的字典的唯一引用是 in bigDict,则只需删除它就会触发垃圾收集器。如果外部有引用,则使用循环删除它们中的每一个都不会做任何事情,因为这del只是意味着“将引用计数减少为一个”,并且当且仅当计数器变为零时,才会删除该对象。

确保对象被释放的最简单方法是在可能的情况下在闭包中创建和使用它。所以你有一个函数,它在主体内部创建大字典,处理它,一旦完成,返回一组值。这样您就可以确定没有杂散的引用。当然,在大多数实际用途中,这实际上是不可能的。

需要注意的是,如果你同时有很多小对象存活,它们的内存不会返回给操作系统,而是作为新对象的池保存。(此行为在 Python 3 中得到了部分改进)。如果内存管理很关键,您可能希望使用数组对象,这样它们就不再是对象了(并在此过程中节省了一些开销)。

于 2014-05-15T13:29:40.850 回答