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

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.lryc.cn/news/573280.html

相关文章:

  • NVIDIA cuFFTDx文档笔记
  • 资产设备管理系统,Java + Vue,移动端+后台管理,实现设备全生命周期信息精准管控与高效运维
  • Windows/Linux系统 Ollama部署deepseek 大模型
  • 面试题-定义一个函数入参数是any类型,返回值是string类型,如何写出这个函数,代码示例
  • 跨标签页通信(三):Web Storage
  • C# WPF常用调试工具汇总
  • 如何定时发布WordPress文章(多种方法)
  • 【Redis】深入理解 Redis 事务:命令、应用与实战案例
  • CertiK联创顾荣辉将于港大活动发表演讲,分享Web3安全与发展新视角
  • C#测试调用ClosedXML根据批注设置excel单元格内容
  • 企业公用电脑登录安全管控的终极方案:ASP操作系统安全登录管控方案
  • 亚马逊认证考试系列 - 第一部份:基础服务 - AWS SAA C03
  • 客户端面经
  • 决策树:化繁为简的智能决策利器
  • 【Kubernetes】从零搭建K8s集群:虚拟机环境配置全指南(DNS/网络/防火墙/SELinux全解析一站式配置图文教程)
  • 题解:P11501 [ROIR 2019] 探险队(Day 2)
  • FPGA四十年创新:因仿真加速而生,AI加速而盛!
  • 【RTP】基于mediasoup的RtpPacket的H.264打包、解包和demo 2:含扩展
  • 11.RSTP快速生成树协议深度剖析:结合华为eNSP模拟器的完整实验方案
  • 为什么要BRE
  • LLM-201: OpenHands与LLM交互链路分析
  • 【基础算法】二分(二分查找 + 二分答案)
  • 华为云Flexus+DeepSeek征文|体验华为云ModelArts快速搭建Dify-LLM应用开发平台并创建b站视频总结大模型
  • Vue3 + TypeScript 中 let data: any[] = [] 与 let data = [] 的区别
  • C++ 内存分配器的作用
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月21日第115弹
  • 【舞蹈】编排:如何对齐拍子并让小节倍数随BPM递减
  • 56-Oracle SQL Tuning Advisor(STA)
  • hot100——第六周
  • MagnTek MT6816-ACD 一款基于各向异性磁阻(AMR)技术的磁性角度传感器 IC