python 字典对象 底层实现 源码分析 PyDictObject(dict)

本文详细分析了Python 3.8.0a0版本字典对象PyDictObject的内部结构,包括ma_used、ma_version_tag、ma_keys和ma_values等关键组成部分。介绍了PyDictKeysObject的存储方式,特别是从3.6版本开始引入的优化,通过紧凑的存储结构减少空间占用并提高CPU缓存效率。同时,提到了combined table和split table两种字典实现,后者在多类继承场景下能有效节省内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PyDictObject

本文参考的是 3.8.0a0 版本的代码,详见  cpython 源码分析 基本篇

以后都在 github 更新,请参考 图解python dict

 

dict 顾名思义是字典,通常来讲一个字典对象都是通过 HashTable 实现,HashTable 里面有一排桶,根据哈希算法不同的 key 映射到不同的或者相同的桶的位置,然后把 key/value 对存储到对应的桶里,因为哈希算法的时间复杂度是 O(1),所以dict的平均查询/增删减改的时间复杂度也会是 O(1)

下面我们来看下 Python 的 PyDictObject

PyDictObject 的信息主要存储在以下的四个位置:

Objects/dictobject.c

Objects/dict-common.h 

Include/dictobject.h

cpython/dictobject.h

并且由上图可知,PyDictObje

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值