关于hash()函数,和内存地址,二进制存储,数据可变性疑问?

关于hash()函数,和内存地址,二进制存储,数据可变性疑问?

几个关键词:可变数据,不可变数据key,散列值,内存地址,数据存储

问1:任何不可变数据,存在散列值,存在内存地址。比如key转换hash,分配id保存value?

问2:任何不可变数据,不存在散列值 ?存在内存地址,不通过散列值,直接分配id保存数据?

问3:内存地址和散列值都为十进制数?如何通过二进制保存在计算机中?


http://img1.sycdn.imooc.com//climg/5d92f5950967b96907931029.jpg

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

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

3回答
xiaoyuan1 2019-10-14 21:45:52

1、比如key转换成hash,他转化成值就已经是他的唯一标识了,他就和value已经唯一对应了,还分配什么id

2、散列值他就是一个值,数据为什么要存在那里面呢,散列值就像你的身份证号一样,是数据值的唯一标识。

3、内存地址和散列数为十进制?为什么要比较他们两个是什么进制的数,就像你会问你的身份证号是十进制的吗,你不用管存的是十进制还是二进制还是十六进制,他就是value的唯一标识。

好帮手慕美 2019-10-09 10:23:25

同学,你好。

1、hash() 函数是用于获取取字符串或者数值的哈希值。同学可以将列表或字典先转换成字符串格式后再使用hash()函数得到哈希值 

http://img1.sycdn.imooc.com//climg/5d9d42be09a6537102660135.jpg

2、计算机在存储十进制数据时,底层会转换成二进制后进行存储。计算机底层会完成这些操作,我们没必要纠结计算机底层是怎么执行的,只要了解计算机存储的是二进制数据就可以了。

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

好帮手慕美 2019-10-08 09:57:11

同学,你好。

1、字典类型的数据是调用内部的散列函数将键(Key)作为参数进行转换,得到一个唯一的地址(即散列值为唯一的内存地址),然后将值(Value)存放到该地址中。

2、其他类型的数据是可以通过hash()函数得到对应的哈希值;在存储时,会直接分配内存地址进行保存,可以使用id()函数获取对象的内存地址。

3、内存地址和散列值为十进制。计算机是无法直接存储十进制数据的,计算机底层中,只识别0和1,因此在存储数据时,会先将十进制转换成若干个0和1即二进制后再进行存储。

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

  • 提问者 lin丶林 #1
    关于第2问,比如列表变量,集合变量,字典变量。 我图片中测试,hash([1, '2', "a"]),,,hash({1, 2, '3', 'a'}),,,hash(字典)都是会报错的。 关于第3问:怎么感觉老师只是在说结论?没解释原因呢?
    2019-10-09 09:18:27
  • xiaoyuan1 回复 提问者 lin丶林 #2
    hash()函数传入的是整型或者字符串等,不能列表或者字典。
    2019-10-14 21:50:03
  • 慕移动2137064 回复 提问者 lin丶林 #3
    建议同学去看看计算机原理,因为可变类型和不可变类型的存储方式不一样,可不是简单的哈希函数能解释清楚
    2020-04-19 11:10:19
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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