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

Python内置hash函数相同输入多次运行为何返回不同结果?

问题原因

这是Python的默认安全机制导致的,和代码逻辑无关:

  • 从Python 3.3版本开始,解释器默认开启哈希随机化防护:每次启动Python进程时,会随机生成一个哈希种子,内置hash()函数对字符串、字节串、包含这类元素的元组的计算结果,都会和这个随机种子绑定。
  • 只要重启Python进程,哪怕输入完全一致,hash()的返回值也会变化。这个设计是为了防范哈希碰撞拒绝服务攻击——避免攻击者构造大量哈希值相同的恶意输入,把字典、集合的O(1)查询拖成O(n),打垮服务。
验证方式

你可以自己简单验证这个逻辑:

  • 在同一个Python交互环境/同一个进程运行周期里,反复调用get_hash(sample_list),返回值一定是固定的,因为进程启动后哈希种子就不会再变;
  • 启动脚本时手动指定固定的哈希种子,多次运行的返回值就会完全一致,启动命令参考:
# Linux/macOS 环境
PYTHONHASHSEED=0 python your_script_path.py

# Windows PowerShell 环境
$env:PYTHONHASHSEED=0; python your_script_path.py
注意事项

绝对不要在需要稳定哈希结果的场景依赖内置hash()函数,包括但不限于:

  • 做文件/内容的完整性校验
  • 把哈希值持久化存储到数据库、文件中
  • 跨进程、跨服务、跨节点比对哈希值
    这类场景应该换用不受随机种子影响的哈希实现:
  • 需要加密安全性的场景,用标准库hashlib提供的SHA256、MD5等算法
  • 追求高性能的非加密哈希场景,可以选用xxHash、MurmurHash这类成熟实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:27:19