Python字典和集合用开放寻址法处理哈希冲突,采用伪随机探测:先计算初始索引,冲突时按j=(5*j)+1+perturn迭代探测,perturn右移更新以避免聚集;删除键后设为伪空位(DELETED)以保证查找连续性;负载因子≥2/3时触发重哈希扩容。
Python 的字典(dict)和集合(set)底层使用开放寻址法(Open Addressing)处理哈希冲突,具体是其中的“伪随机探测”(pseudo-random probing),而不是链地址法(chaining)。
当两个键计算出相同的哈

hash(key) & (mask) 算出(mask = table_size - 1,要求表长是 2 的幂)j = (5*j) + 1 + perturb,再对 mask 取模perturb 初始为哈希值右移 5 位,每次迭代右移再更新,用于打散探测路径,避免聚集Python 字典允许动态增删,删除一个键后,对应位置不能简单置为空(否则后续查找可能因中断探测链而失败)。所以它会标记为 DELETED(内部常量),即“伪空位”:
Python 会监控已使用槽位(含伪空位)占总槽数的比例。当负载因子 ≥ 2/3 时,触发重哈希(rehash):
Python 的选择兼顾了局部性与实现简洁性: