

新闻资讯
技术学院Python字典查找平均时间复杂度为O(1),依赖哈希表结构:键经hash()计算哈希值,用位运算掩码映射下标,开放寻址法处理冲突,并通过装填因子触发扩容保障效率。
Python字典(dict)的查找平均时间复杂度是 O(1),核心依赖于哈希表(hash table)结构,而非“哈希算法本身有多快”,关键在于哈希值如何被计算、映射、处理冲突。
Python 对每个键调用 hash() 得到一个整数哈希值。这个值不是简单取内存地址,而是根据对象类型有专门逻辑:
hash(42) == 42)id(),但可重写 __hash__ 和 __eq__ 来支持字典键⚠️ 注意:不可变对象才可哈希;列表、字典等可变类型不能做键,因为哈希值需稳定不变。
字典底层维护一个动态扩容的“桶数组”(buckets),长度始终是 2 的幂(如 8、16、32…)。Python 不用 hash % len(buckets),而是用位运算:
立即学习“Python免费学习笔记(深入)”;
10000),
则掩码是 15(01111)hash & mask(比如 hash=137 → 137 & 15 = 9)[0, len-1] 范围内不同键可能算出相同哈希值(哈希冲突),Python 字典不用链地址法(不拉链),而是用开放寻址法(open addressing):
DELETED 标记,避免打断后续查找链效率不崩的关键是限制“桶有多满”:
2/3(如 66%),字典自动扩容(通常是翻倍),并重新哈希所有键所以,字典快不是因为“哈希函数无敌”,而是哈希计算快 + 掩码定位快 + 冲突探测路径短 + 扩容机制兜底。