鱼C论坛

 找回密码
 立即注册
查看: 769|回复: 2

027课后作业问题

[复制链接]
发表于 2018-6-9 11:11:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
老师说创建集合时列表、字典、元组是不可哈希的。但我发现元组好像可以啊,
  1. >>> set3 = {(1,2),(2,3)}
  2. >>> set3
  3. {(1, 2), (2, 3)}
  4. >>> type(set3)
  5. <class 'set'>
复制代码

而且还可以对里面的元组进行索引,
  1. >>> for i in set3:
  2.         print(i[0],i[1])

  3.        
  4. 1 2
  5. 2 3
  6. >>>
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-9 11:38:14 | 显示全部楼层
1.可哈希(hashable)和不可改变性(immutable)

如果一个对象在自己的生命周期中有一哈希值(hash value)是不可改变的,那么它就是可哈希的(hashable)的,因为这些数据结构内置了哈希值,每个可哈希的对象都内置了__hash__方法,所以可哈希的对象可以通过哈希值进行对比,也可以作为字典的键值和作为set函数的参数。所有python中所有不可改变的的对象(imutable objects)都是可哈希的,比如字符串,元组,也就是说可改变的容器如字典,列表不可哈希(unhashable)。我们用户所定义的类的实例对象默认是可哈希的(hashable),它们都是唯一的,而hash值也就是它们的id()。


但是你出示的代码确实对它进行索引,而不是hash,我觉得很奇怪。元组不可改变,字典和列表都可以被改变和添加。所有序列都可以被索引。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-9 14:14:56 | 显示全部楼层
元祖是内置了__hash__方法的,当然可以索引!
集合没有内置,所以不能索引,但你用for时,i所指向的是集合内的元祖,不是集合,所以会有索引结果
小白见解,不知道对否
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 06:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表