You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中字典(哈希表)大小增长机制及clear后尺寸变化疑问

Python字典的两个常见疑问解答

1. Python中字典(哈希表)的大小是如何增长的?

Python字典底层基于哈希表实现,其哈希表的桶(bucket)数量会随元素数量动态调整:

  • 初始空字典的桶数在CPython中为8(sys.getsizeof()返回的240字节包含字典对象的固定开销,比如引用计数、类型指针、哈希表元数据等,并非单纯桶数组的大小)。
  • 当字典元素数超过**负载因子(默认2/3)**与当前桶数的乘积时,触发扩容:
    • 桶数小于50000时,扩容为原桶数的2倍;
    • 桶数≥50000时,扩容为原桶数的1.5倍,平衡内存占用与查询效率。
  • 扩容时会重新计算所有键的哈希值,将元素重新分配到新桶中,维持哈希表的低冲突率。

2. 初始化字典时大小为240,调用dict.clear()后为何变为72?

  • sys.getsizeof()返回的是字典对象的总内存占用,包含哈希表桶数组、内部管理结构等所有开销。
  • 初始化空字典时,CPython会预先分配含8个桶的哈希表,加上字典对象的固定基础开销,总大小为240字节(数值因Python版本、系统位数略有差异)。
  • 调用clear()时,字典会清空所有键值对,但不会完全释放哈希表内存,而是将桶数组收缩为最小的空结构,仅保留字典对象的基础管理开销(如引用计数、类型信息),因此内存大小降至72字节。
  • 这种设计是为了复用:后续向字典添加元素时,无需重新创建完整哈希表结构,直接扩容即可提升性能。

测试代码

import sys
a = {}
sys.getsizeof(a)  # 输出240
a.clear()
sys.getsizeof(a)  # 输出72

内容的提问来源于stack exchange,提问作者Joseph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 01:35:26