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

Python中hash值计算原理及脚本多次运行hash值变动原因咨询

Python hash() 方法常见问题解答

字符串哈希的计算逻辑

Python的字符串哈希没有公开的固定计算式可以直接算出你示例中的1567799509结果,具体实现受以下因素影响:

  • 不同Python版本的哈希算法不同:Python 3.10+ 默认对ASCII字符串、字节串使用SipHash 1-3算法,更早版本部分使用修改版的FNV哈希算法
  • 哈希计算会默认引入随机参数,你看到的运行结果是加入了随机种子后的输出,如果关闭哈希随机化(运行前设置环境变量PYTHONHASHSEED=0),同版本、同架构的Python对同一个字符串的哈希值会固定。

多次运行哈希值变动的原因

哈希值会在不同次Python运行时发生变动,原因如下:

  • Python 3.3及之后的版本默认开启了哈希随机化机制,该机制的设计目的是防范哈希碰撞拒绝服务攻击:如果哈希规则固定,攻击者可以批量构造哈希值相同的字符串,让字典、集合这类依赖哈希的容器查询效率从O(1)退化到O(n),严重拖慢程序性能
  • 每次启动Python解释器时,系统会自动生成一个随机的种子值参与哈希运算,所以不同次启动解释器运行相同代码,得到的字符串哈希值会不同
  • 注意:同一次解释器运行过程中,同一个不可变对象的哈希值是固定的;只有整数类型的哈希值固定等于自身,不受哈希随机化影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:18:03