python set去重简析

python 中的集合可以去重是实现了__hash__与__eq__

  当class没有定义__eq__()方法时,那么它也不应该定义__hash__()方法。如果它定义了__eq__()方法,却没有定义__hash__()方法,那么这个类的实例就不能在可哈希集合使用。如果一个类定义了一个可变对象(这里应该是指class的成员之一为可变对象),且实现了__eq__()方法,那么这个类就不应该实现hash()方法,因为可哈希对象的实现要求键值key的hash值是不变的(如果一个对象的hash值改变了,那么它会被放在错误的hash桶里)
  __dict__方法,我们这里提前说一下它,类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类__dict__里的,对象的__dict__中存储了一些self.xxx的一些东西。

set的去重是通过两个函数__hash__和__eq__结合实现的。
1、当两个变量的哈希值不相同时,就认为这两个变量是不同的。
2、当两个变量哈希值一样时,调用__eq__方法,比较是否具有相同的各种属性,可以简单地理解为值是否相等,但我们需要知道除了值以外,还比较了很多其他的属性。当返回值为True时认为这两个变量(对象)是同一个,应该去除一个。返回FALSE时,仅仅hash冲突,不是同一个对象,不去重。

posted @ 2021-04-15 11:22  简直😓  阅读(263)  评论(0编辑  收藏  举报