关于哈希值

关于哈希值

课件中提到了哈希值的两个特点:

一是哈希值在绝大多数情况下是唯一的,那么假设在一段代码中,某次运行的情况下,一个int类型的变量(如下面的num)的值恰巧是某个字符串变量(如下面的str)的哈希值,那么这两个变量的哈希值在本次运行中就相同了,这样的话,在实际工作中对程序有什么影响么?

str = 'abcd'
num = 2339115305586261771
print(hash(str))
print(hash(num))

二是字典是通过key的哈希值在内存中存储value的,而每次运行时哈希值会改变,那么是不是每运行一次,value的内存地址都会全部改变一次呢?这样的话如果字典的数据量特别大的话,会不会每运行一次就会耗费大量的机能,导致程序变慢呢?


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕美 2019-05-06 10:38:26

同学,你好,哈希值是一段数据唯一且极其紧凑的数值表示形式,即两个不同的数据产生的哈希值是不同的。例如:只要哈希值一样,那么两个文件就有极大的概率是完全一样的,不仅大小一样,内容里的每个字节每一位都一样。

问题二:字典会根据key值的哈希值在内存中开辟一块空间即内存地址用来存放value值,每次的内存地址是不一样的,Python中会有垃圾回收机制对内存进行回收,后面课程中会讲到,同学可以先做了下解。

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

  • 提问者 洛维西 #1
    但是字符串类型的哈希值是纯数字,理论上以这个哈希值为内容的int类型的变量也是存在的啊,这样的话这俩变量的哈希值不就一样了么?
    2019-05-07 16:45:15
  • 好帮手慕美 回复 提问者 洛维西 #2
    但是在同一时间内得到的字符串类型和int类型的哈希值是不会一样的。例:定义了字符串和int型变量,在获取这两个变量的哈希值时是不会相同的。
    2019-05-07 16:51:05
  • 问题一:我试过你的思路,把str对应生成的Hash值,作为对象代入hash(),生成的Hash值真不一样。如下: >>> t1 = hash('abcde') >>> print(t1) 6095496336445707965 >>> t2 = hash(6095496336445707965) >>> print(t2) 1483810318018320063 >>> t3 = 1483810318018320063 >>> print(hash(t3)) 1483810318018320063 这个时候我遇到的问题是现在这个‘整数’类型的Hash值,把它作为对象再次代入hash()函数时,生成了另外一个不同的‘整数’。那么我的问题是‘整数的Hash值即整数本身’这句话中的‘整数’概念有什么特别清晰的定义么? 问题二:我看了后面你的课程,正如“好帮手幕美”说的那样,一个数据在一次运行过程当中被初始化以后,如果长时间不用。其内存会被释放回收。这样就避免了硬件资源的过度消耗。 综上,欢迎继续加入讨论,望采纳,谢谢!
    2020-02-21 20:20:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师