You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Python 3.6.4(CPython)哈希函数类型及查询方法咨询

Python 3.6.4 (CPython)哈希函数相关问题解答

1. Python 3.6.4(CPython)使用的哈希函数类型

对于字符串、字节串这类可变长度的对象,CPython 3.6.4采用的是SipHash-1-3哈希函数。

从Python 3.3开始,CPython就引入了SipHash来解决之前哈希碰撞引发的安全漏洞——它会在Python启动时生成一个随机salt值混入哈希计算,默认情况下每次重启Python,同一个字符串的哈希值可能会变化。不过你提到执行hash('foo')hash('fooo')得到了固定结果,这大概率是因为你的环境中设置了PYTHONHASHSEED环境变量为固定值,关闭了哈希随机化特性。

2. 如何查询当前Python实现的内置hash函数类型

有两种实用方法可以查询:

  • 使用sys.hash_info(推荐):在Python交互环境中执行以下代码:
    import sys
    print(sys.hash_info)
    
    输出结果里的algorithm字段会直接显示当前使用的哈希算法名称,比如在你的3.6.4环境中,应该会显示algorithm='siphash13',同时还能看到哈希位数、种子位数等细节信息。
  • 查看对应版本的CPython源码:如果想深入了解实现逻辑,可以查看CPython对应版本的源码,比如字符串的哈希逻辑在Objects/stringobject.c文件的_PyUnicode_Hash相关函数中,这个方法更适合有一定源码阅读基础的用户。

内容的提问来源于stack exchange,提问作者Amelio Vazquez-Reina

火山引擎 最新活动