Python中is和==的区别

摘要

在大多数编程语言中(如JS、PHP等)比较两个值是否相等,往往是借助于==(等于)或===(全等于)。不同的是,在Python中并没有===(全等于)符号,而只有is和==。

在大多数编程语言中(如JS、PHP等)比较两个值是否相等,往往是借助于==(等于)或===(全等于)。不同的是,在Python中并没有===(全等于)符号,而只有is和==

看到这里,相信很多人都会产生疑问?Python中is和==两者的区别是什么,是否等同于其它编程语言中的===呢?

这里有必要提一点,Python中的每个对象都有三种属性:id, type, value。不同对象实例的id一定是不同的,可以把id看做是和内存地址一一对应的。

要区别is和==两者的区别,我们可以这样去记:==比较的是值,is比较的是内存地址。

当然了,在Pyhon3中也有一个例外不太符合大家的认知:Python3在实现整型中对于小于-5的数,会新建对象(在内存中开辟新的地址)。

例子如下:

  1. # 请在Python3中运行此代码
  2. n1 = -6
  3. n2 = -6
  4. print(n1 is n2) # False
  5. n3 = n1
  6. print(n1 is n3) # True

注:笔者不知道这个算不算Python版本升级中的bug,上面的代码在Python3中返回False和True,在Python2中确返回True和True。

shaw

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: