哈希函数python
时间: 2024-12-31 08:20:34 浏览: 10
### Python 中哈希函数的使用方法和内置实现
#### 内置哈希函数
Python 提供了一个名为 `hash()` 的内置函数用于计算对象的哈希值。对于不可变类型的对象,如字符串、整数、浮点数以及元组等,`hash()` 可以返回一个唯一的整数值作为其标识符[^1]。
```python
print(hash("hello")) # 输出可能是 -23097836854775808
print(hash(123)) # 输出是 123
```
#### 字典中的哈希机制
当涉及到字典这种映射类型的数据结构时,Python 利用了内部优化过的哈希算法来存储键值对。每当向字典添加新项或查找已有项时,都会调用相应键对象的 `__hash__()` 方法获取对应的哈希码,并通过此编码快速定位到目标位置[^2]。
如果遇到不同键具有相同哈希值得情况即发生碰撞,则采用链地址法解决这一问题,在每个桶位维护着一条单向列表用来容纳所有映射至此处的对象实例。
#### 自定义类支持哈希操作
为了让自定义类能够参与哈希运算并被当作字典键使用,需重载特殊成员函数 `__eq__()`, `__ne__()` 和 `__hash__()` 。其中前两者负责比较逻辑相等性;而后者则提供具体的哈希规则。
下面是一个简单的例子展示如何让自定义类成为可哈希:
```python
class Point:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __repr__(self):
return f"<Point({self.x}, {self.y})>"
def __eq__(self, other):
if isinstance(other, Point):
return self.x == other.x and self.y == other.y
return NotImplemented
def __hash__(self):
return hash((self.x, self.y))
p1 = Point(1, 2)
d = {}
d[p1] = "point one"
print(d) # 输出: {<Point(1, 2)>: 'point one'}
```
在这个案例里,`Point` 类实现了必要的接口使得它的实例可以安全地充当字典里的键。
阅读全文