【python】is、== 两种比较方式的区别

一般都认为python中:

  • is比较的是两对象的内存地址,也就是身份比较
  • ==比较的是两对象的值

这种理解也没错,但是需要注意一个前提,当说==比较的是对象的值时,这里的对象其实仅指的是python中自带的一些可变容器类型,比如列表。因为这些容器类型源码中已经预实现了__eq__方法,当在python中使用==比较运算符时,其实调用的就是这个方法。

如果对象的类或父类中没有实现这个魔术方法,==的作用和is相同,比较的还是对象的内存地址。

class NodeImplEq:
    def __init__(self, x):
        self.val = x
        self.next = None

    def __eq__(self, other):
        if isinstance(other, NodeImplEq):
            return self.val == other.val


class Node:
    def __init__(self, x):
        self.val = x
        self.next = None


if __name__ == '__main__':
    node1 = Node(1)
    node2 = Node(1)
    print(node1 == node2)  # False
    print(node1 is node2)  # False

    node3 = NodeImplEq(1)
    node4 = NodeImplEq(1)
    print(node3 == node4)  # True
    print(node3 is node4)  # False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值