python - 删除所有键后大 python 字典的内存占用
问题描述
最后一天,我在 python 中进行了一个简单的测试,想知道巨大的字典(约 1000 万个键)对内存的影响是什么,以及如何有效地清空它们(不是一次所有的键)。我使用 clear() 方法作为参考,我正在寻找在删除所有键后仍在使用的内存量。
在我的测试中, clear() 方法非常擅长删除内存并将其归还给操作系统,而当我使用del
或pop
删除所有键后消耗的内存仍然很大。为了测量对象使用的内存,我使用了一个在线找到的函数,该函数位于源代码的开头(也可在此处获得)。
与orclear
相比,该方法如何高效?pop
del
我的测试代码和测试结果都可以在这里找到。
谢谢你的帮助。
解决方案
为了避免过度的哈希表重建,pop
并且del
不要调整字典的底层哈希表的大小。一个一个地删除条目永远不会缩小字典的哈希表。
仅当字典在插入时空间不足时才会调整大小(这可能会缩小字典,因为虚拟条目在实现中的工作方式),或者如果不相关的技术细节强制重建(例如必须取消拆分拆分表字典)。
clear
不过,将完全丢弃旧的哈希表。
推荐阅读
- django - Django 无法显示提供的注销模板
- python - 让 subprocess.Popen 只等待其子进程返回,而不是任何孙子进程
- python - 熊猫 df 循环 + 合并
- laravel - SQLSTATE[IM002] SQLDriverConnect: 0 [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified in Laravel
- xamarin.forms - 选择器将源绑定到列表并从另一个对象中选择值
- azure - Azure 服务总线客户端批处理如何保证消息不丢失?
- apache-spark - 当不满足所有选择条件时,Spark 将选择哪个连接?
- reactjs - 在 Material UI 中通过样式化 API 使用多个 CSS 规则名称
- windows - 合并\加入三个 FFMPEG 命令(Drawtext / -filter_complex overlay / anullsrc=channel_layout)
- flutter - 如何跳转到列表中的某个部分?