前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python Set 判定方式

Python Set 判定方式

作者头像
为为为什么
发布2024-09-26 09:31:40
640
发布2024-09-26 09:31:40
举报
文章被收录于专栏:又见苍岚

本文记录 Python Set 判定为同一对象的原理。

Set 判定方法

Python 中的集合(set)确实是通过 __hash__ 方法来判定两个对象是否相同的。在 Python 中,集合是一个无序的、不重复的元素集。当您将一个对象添加到集合中时,Python 会调用该对象的 __hash__ 方法来获取它的哈希值,再调用 __eq__ 方法双重判定是否为同一对象。

具体步骤
  1. 哈希值计算:当把一个对象添加到集合中时,Python 会首先调用该对象的 __hash__ 方法来计算它的哈希值。
  2. 哈希值比较:集合内部使用这个哈希值来快速定位存放元素的位置。如果位置上已经有元素,那么需要进一步比较它们的哈希值。
  3. 同一位置上的对象比较:如果两个对象的哈希值相同,Python 还会调用它们的 __eq__ 方法来确认这两个对象是否真的相同。这是因为在不同的对象上可能计算出相同的哈希值(哈希冲突)。

只有在两个对象的哈希值相同,并且它们通过 __eq__ 方法比较也返回 True 时,Python 才会认为这两个对象是相同的,因此在集合中它们被视为同一个元素,不会重复添加。

示例代码

代码语言:txt
复制
class MyClass:

    def __init__(self, id, value):
        self.id = id
        self.value = value

    def __hash__(self):
        return hash(self.id)

    def __eq__(self, other):
        if isinstance(other, MyClass):
            return self.value == other.value
        return False

obj1 = MyClass(1, 10)
obj2 = MyClass(2, 10)
obj3 = MyClass(1, 20)
obj4 = MyClass(2, 20)
obj5 = MyClass(1, 20)


my_set = {obj1, obj2, obj3, obj4, obj5}

print(len(my_set))  # 输出 4,因为 obj3 和 obj5 被视为相同

文章链接:

https://cloud.tencent.com/developer/article/2453743

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-9-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Set 判定方法
    • 具体步骤
    • 示例代码
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档