python-"is" v.s. "=="

先说结论:“==”只是判断两个变量是否相等,“is”则判断两个变量是否是同一对象。
看例子:

>>> int_a = 1
>>> int_b = 1
>>> int_a == int_b
True
>>> int_a is int_b
True

>>> int_c = 10000
>>> int_d = 10000
>>> int_c == int_d
True
>>> int_c is int_d
False

这是为什么呢?再看看这四个变量的id:

>>> id(int_a)
1908736464
>>> id(int_b)
1908736464
>>> id(int_c)
2471603994928
>>> id(int_d)
2471603994864

可以看到int_aint_b的id是相同的,但是int_cint_d是不同的,至于为什么id不同,就牵扯到在《 python-对象之hashable&unhashable与immutable&mutable》里面提到的“解释器在对值很小的int和很短的字符串的时候做了一点小优化,只分配了一个对象”。由此看出,”is”实际上比较的是id,可以理解为对象的地址,”==”比较的是值,就算两个变量存储位置不同,只要值相同,”==”就会返回True。所以说”is”比”==”更加严格,“==”只是表示这两个变量相等,“is”则表示这两个变量是同一个对象。

补充一句:判断一个实例是不是某对象的实例,可以使用isinstance(instance_name, class_name)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值