Python hash()函数

在 Python 中,hash()函数用于获取给定对象的哈希值(散列值),即对象的唯一标识符。

哈希值是一个整数,具有以下特点:

  • 对于同一个对象,在程序的不同执行期间,哈希值保持不变。
  • 对于不同的对象,哈希值可能相同,但概率很小。

hash()函数接受一个参数,即要计算哈希值的对象,返回该对象的哈希值(如果它有);

注意:不是所有对象都可以被哈希。只有不可变的对象才能被哈希,比如数字、字符串、元组等。可变的对象(如列表、字典、集合等)不能被哈希。如果尝试对可变对象进行哈希操作,将会抛出TypeError异常。

hash()函数示例


a = "hello world"
print(hash(a)) # 2181361957466243722(随机)

b = 1
print(hash(b)) # 1
c = 1.0
print(hash(c)) # 1

d = (1,2,3)
print(hash(d)) # 529344067295497451(随机)

e = [1,2,3]
f = {}
#print(hash(e)) # TypeError
#print(hash(f)) # TypeError

__hash__()方法

对象可以实现自己的__hash__()方法,但是需要注意的是,hash()根据机器的字长来截断返回值:


class myClass:

    def __init__(self,value):
        self.value = value

    def __hash__(self):
        return self.value

a = myClass(1234567890)
print(hash(a)) # 1234567890

a.value = 12345678901234567890
print(hash(a)) # 816463855166098135

#b = 12345678901234567890 & 0xffffffff  #只保留低32位
b = 12345678901234567890 & 0xffffffffffffffff  #只保留低64位
print(hash(b)) # 816463855166098135

如果对象自己实现了__hash__()方法,hash()函数会将__hash__()的返回值与0xffffffffffffffff进行位与操作;

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/python-built-in-functions/python-hash.html

分类: 计算机技术
推荐阅读:
Python abs()函数 abs()函数是Python内置函数之一,它返回一个数的绝对值。这个函数只有一个参数,可以是整数、浮点数或者复数。
Python pow()函数 pow() 函数是 Python 内置函数之一,用于计算一个数的幂。它接受两个参数,第一个参数为底数,第二个参数为指数,如果提供第三个参数,则表示对结果取模。
Golang中imported and not used:这类错误解决办法 在Golang中,比较容易碰到诸如 imported and not used: "time" 这样的错误;在这里表示你导入了一个time包却没有使用它;
WordPress去掉dns-prefetch 这段代码的作用是DNS预获取,当你网站有用到 s.w.org这个站点下的资源时,它能给我们提速,但实际上,国内几乎是用不上的。
Rust使用cfg来实现不同系统的条件编译 Rust使用cfg来实现不同系统的条件编译
Golang获取CPU物理核心数 在Go语言中,可使用runtime包中的NumCPU()函数获取CPU的物理核心数;