Python字典基于哈希表实现,键必须为不可变类型以确保哈希值稳定,查找、插入、删除平均时间复杂度为O(1);当键冲突时采用开放寻址法解决,并在负载因子过高时自动扩容,保证操作高效性。

Python 字典(dict)是一种可变容器,用于存储键值对(key-value pairs)。它的底层采用哈希表(Hash Table)实现,这使得查找、插入和删除操作的平均时间复杂度接近 O(1)。
哈希表的工作原理
字典的键必须是不可变类型(如字符串、数字、元组),因为这些类型可以被哈希。当你给字典添加一个键值对时,Python 会:
- 调用键的 hash() 函数生成一个哈希值
- 根据哈希值确定该键值对在内存中的存储位置
- 如果发生哈希冲突(不同键产生相同哈希值),Python 使用开放寻址法解决冲突
这种方式让字典在大多数情况下能快速定位数据,不需要遍历整个结构。
键的唯一性和不可变性要求
字典中每个键必须唯一。如果使用已存在的键赋值,新值会覆盖旧值:
立即学习“Python免费学习笔记(深入)”;
my_dict = {'a': 1, 'b': 2}my_dict['a'] = 3 # 更新键 'a' 的值
print(my_dict) # 输出: {'a': 3, 'b': 2}
由于哈希过程依赖键的稳定性,可变类型(如列表、字典)不能作为键。尝试这样做会触发 TypeError。
动态扩容机制
当字典中元素增多,哈希冲突概率上升,性能下降。Python 会在字典填充到一定比例时自动扩容:
- 重新分配更大的内存空间
- 将所有键值对重新哈希到新表中
这个过程对用户透明,但会导致一次短暂的性能开销。
基本上就这些。字典高效的核心在于哈希表设计,理解这一点有助于写出更高效的代码。比如尽量使用简单、短小的不可变对象作键,避免频繁增删大量键值对。










