首页 > 解决方案 > 删除所有键后大 python 字典的内存占用

问题描述

最后一天,我在 python 中进行了一个简单的测试,想知道巨大的字典(约 1000 万个键)对内存的影响是什么,以及如何有效地清空它们(不是一次所有的键)。我使用 clear() 方法作为参考,我正在寻找在删除所有键后仍在使用的内存量。

在我的测试中, clear() 方法非常擅长删除内存并将其归还给操作系统,而当我使用delpop删除所有键后消耗的内存仍然很大。为了测量对象使用的内存,我使用了一个在线找到的函数,该函数位于源代码的开头(也可在此处获得)。

与orclear相比,该方法如何高效?popdel

我的测试代码和测试结果都可以在这里找到。

谢谢你的帮助。

标签: pythondictionarymemory

解决方案


为了避免过度的哈希表重建,pop并且del不要调整字典的底层哈希表的大小。一个一个地删除条目永远不会缩小字典的哈希表。

仅当字典在插入时空间不足时才会调整大小(这可能会缩小字典,因为虚拟条目在实现中的工作方式),或者如果不相关的技术细节强制重建(例如必须取消拆分拆分表字典)。

clear不过,将完全丢弃旧的哈希表。


推荐阅读