码迷,mamicode.com
首页 > 编程语言 > 详细

python tips:作为dict的key的类

时间:2019-06-13 20:26:36      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:other   elf   key   链表   return   tips   The   div   span   

Python的dict由hash实现,解决hash冲突的方法是二次探查法。hash值相同的元素会形成链表。所以dict在查找key时,首先获取hash值,直接得到链表的表头;而后在链表中查找等于key的值。

所以要使一个对象的实例能够作为dict的key值,一般需要实现__hash__和__eq__两个方法。

没有实现__eq__方法的类的实例总是不相等(引用总是不同)

 1 class A:
 2     def __hash__(self):
 3         return 2
 4 
 5 a = A()
 6 b = A()
 7 d = {a:0}
 8 if b in d:
 9     print(d[b])
10 else:
11     print("b is not in d")

输出结果

1 b is not in d

可以用于key的实例

 1 class A:
 2     def __hash__(self):
 3         return 2
 4     
 5     def __eq__(self, other):
 6         return True
 7 
 8 a = A()
 9 b = A()
10 d = {a:0}
11 if b in d:
12     print(d[b])
13 else:
14     print("b is not in d")

输出结果

1 0

总结:

1. 要作为dict的key,需要能够求hash值(key为不可变对象),需要能比较(是否相等)

2. 对于类来说,实例求hash需要实现__hash__,比较是否相等需要实现__eq__(默认比较引用,不同实例的引用总是不同)

 

python tips:作为dict的key的类

标签:other   elf   key   链表   return   tips   The   div   span   

原文地址:https://www.cnblogs.com/luoheng23/p/11018813.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!