如何计算哈希(无)?

Jas*_*ker 11 python hash

在我的机器上,hash(None)返回一个值:

>>> hash(None)
-2138947203
Run Code Online (Sandbox Code Playgroud)

出于好奇,这个哈希值是如何计算的?似乎这个值不是基于None's,id因为如果我重新启动Python解释器它是相同的.

Pet*_*rin 12

基于无的id,但没有一个是被定义为C全局变量的几个Python对象之一,所以它的地址(通常)不会改变的Python运行之间.其他这样的对象是TrueFalse(但是这些对象是整数),或者像object和的内置类tuple.

但是,不同的CPython构建之间的地址(和哈希)是不同的.在我的系统上,hash(None)给出539708.

  • 不用说,这是一个CPython实现细节,所以你不应该依赖它. (4认同)
  • 出于好奇,*会如何依赖它? (2认同)