当前位置: 首页 > ai >正文

Python 的内置函数 hash

Python 内建函数列表 > Python 的内置函数 hash

Python 的内置函数 hash() 是一个非常有用的工具函数,主要用于获取对象的哈希值。哈希值是一个固定长度的整数,代表该对象的唯一标识。在 Python 中,hash() 函数常用于字典键值、集合元素等场景,因为这些数据结构内部依赖哈希值来快速查找和比较对象。

1. 基本用法

  • hash() 函数接受一个对象作为参数,返回该对象的哈希值。
  • 示例:
    print(hash("hello"))  # 输出字符串 "hello" 的哈希值
    print(hash(123))      # 输出整数 123 的哈希值
    

2. 哈希值的特性

  • 不可变对象:只有不可变对象(如字符串、元组、数字等)才能被哈希。如果尝试哈希可变对象(如列表、字典),会引发 TypeError
    • 示例:
      hash([1, 2, 3])  # TypeError: unhashable type: 'list'
      
  • 一致性:在同一个 Python 进程中,同一对象的哈希值保持不变。
  • 不同对象可能相同:不同对象可能有相同的哈希值(哈希碰撞),但概率较低。

3. 应用场景

  • 字典键值:字典的键必须是可哈希的,因为 Python 使用哈希值快速定位键值对。
    • 示例:
      d = {}
      d["key"] = "value"  # "key" 必须是可哈希的
      
  • 集合元素:集合存储唯一元素,依赖哈希值判断元素是否重复。
    • 示例:
      s = {1, 2, 3}  # 集合中的元素必须是可哈希的
      

4. 自定义对象的哈希

  • 如果自定义类需要支持哈希,可以重写 __hash__() 方法。通常还需要重写 __eq__() 方法以确保哈希一致性。
    • 示例:
      class Person:def __init__(self, name, age):self.name = nameself.age = agedef __hash__(self):return hash((self.name, self.age))  # 基于元组生成哈希值def __eq__(self, other):return (self.name, self.age) == (other.name, other.age)p = Person("Alice", 25)
      print(hash(p))
      

5. 注意事项

  • 哈希值在不同 Python 版本或不同机器上可能不同(如 Python 3.3+ 引入了随机哈希种子以防止攻击)。
  • 哈希值不保证唯一性,仅用于快速比较和查找。

hash() 函数是 Python 中高效数据操作的重要工具,合理利用可以显著提升程序性能。

http://www.xdnf.cn/news/14560.html

相关文章:

  • python模块常用语法sys、traceback、QApplication
  • 操作系统内核态和用户态--2-系统调用是什么?
  • 决策树:化繁为简的智能决策利器
  • GO语言---数组
  • 【Docker基础】Docker镜像管理:docker rmi、prune详解
  • 经典:在浏览器地址栏输入信息到最终看到网页的全过程,涉及网络协议以及前后端技术
  • Vue状态管理实践:使用Vuex进行前端状态管理
  • FVISION 未来视界工作室:AI驱动的创新与智能外包平台
  • TodoList 案例(Vue3): 使用Composition API
  • Snapchat矩阵运营新策略:亚矩阵云手机打造高效社交网络
  • 基于SpringBoot+Uniapp的活动中心预约小程序(协同过滤算法、腾讯地图、二维码识别)
  • 【论文笔记】【强化微调】TinyLLaVA-Video-R1:小参数模型也能视频推理
  • SQLite 数据库操作完整指南
  • Spring Boot邮件发送终极指南:从基础到高级应用
  • AI大模型学习之基础数学:高斯分布-AI大模型概率统计的基石
  • RocketMQ--为什么性能不如Kafka?
  • Mac电脑-Markdown编辑器-Typora
  • springboot垃圾分类网站
  • 浅议 3D 展示技术为线上车展新体验带来的助力​
  • Qt的学习(七)
  • Kubernetes多容器Pod实战
  • 操作系统进程与线程核心知识全览
  • 一个小BUG引发的对Mybatis-Plus的模糊查询的思考
  • C 语言结构体:从基础到内存对齐深度解析
  • word-spacing 属性
  • 那些年,曾经辉煌过的数据库
  • AtCoder AT_abc411_c [ABC411C] Black Intervals
  • python基础知识,以及7个练习案例
  • ubuntu24.4 + ros2 jazzy 安装gazebo
  • C++11 std::thread 多线程编程详解