You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python的object类是否内置了基于ID的相等性判断方法?

Python中object类的相等性判断及实例比较失败分析

核心问题解答

Python的object类确实内置了基于对象ID的相等性判断方法——__eq__。这个默认实现的逻辑很直接:只有当两个变量指向同一个内存地址的对象时,==比较才会返回True,本质上等价于判断id(a) == id(b)。

示例代码分析

你提供的代码里,类A继承自object但没有重写__eq__方法,所以会直接沿用父类的默认逻辑:

class A(object):
    def __init__(self, i):
        self.i = i


def test_keyset():
    i1 = A(1)
    i2 = A(1)
    
    # fails:
    assert i1 == i2

这里i1和i2是两个独立创建的实例,它们在内存中占据不同的地址(id(i1)和id(i2)返回的值不同),因此调用object.__eq__进行比较时会返回False,断言自然失败。

解决方法

如果希望属性值相同的A类实例被判定为相等,需要手动重写__eq__方法,自定义相等性判断逻辑:

class A(object):
    def __init__(self, i):
        self.i = i
    
    def __eq__(self, other):
        # 先判断对方是否是A类实例,避免类型不匹配的错误
        if not isinstance(other, A):
            return NotImplemented
        # 比较实例的属性值
        return self.i == other.i

修改后再执行assert i1 == i2就会成功,因为此时==会调用我们重写的__eq__,只要i属性值相同就返回True。

内容的提问来源于stack exchange,提问作者matanox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:37:12