Python中 is 和 == 的区别

>>> a = 'hello'
>>> b = 'hello'
>>> a is b
True
>>> a == b
True
>>> a = 'hello world'
>>> b=  'hello world'
>>> a is b
False
>>> a == b
True
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a is b
False
>>> a == b
True
>>> a = [1, 2, 3]
>>> b = a
>>> a is b
True
>>> a == b
True

是不是很诧异,a, b都是‘hello’的时候is和==都是True,为什么是‘hello world’的时候就不一样了呢?

官方文档中说:

is 表示的是对象标示符(object identity),而 == 表示的是相等(equality)。is 的作用是用来检查对象的标示符是否一致,也就是比较两个对象在内存中的地址是否一样,而 == 是用来检查两个对象是否相等。我们在检查 a is b 的时候,其实相当于检查 id(a) == id(b)。而检查 a == b 的时候,实际是调用了对象 a 的 eq() 方法,a == b 相当于 a.eq(b)。一般情况下,如果 a is b 返回True的话,即 a 和 b 指向同一块内存地址的话,a == b 也返回True,即 a 和 b 的值也相等。

前面的问题涉及到python字符串的驻留机制:

  • 在交互模式下,每行字符串字面量都会申请一个新字符串,但是只含大小写字母、数字和下划线的会被intern(驻留),也就是维护了一张dict来使得这些字符串全局唯一。

所以,‘hello world’包含空格,不会驻留,所以两者不同。

>>> c = 'fdsafdsafdsafdsafhdsalfhdsiafhsadhfkdsahfkasdgfkasdgfksadgfkasdf'
>>> d = 'fdsafdsafdsafdsafhdsalfhdsiafhsadhfkdsahfkasdgfkasdgfksadgfkasdf'
>>> c is d
True
>>> m = 'a b'
>>> n = 'a b'
>>> m is n
False
>>> x = 'a_b12'
>>> y = 'a_b12'
>>> x is y
True
>>> x == y
True
>>>

总结:is 是检查两个对象是否指向同一块内存空间,而 == 是检查他们的值是否相等。可以看出,is 是比 == 更严格的检查,is 返回True表明这两个对象指向同一块内存,值也一定相同。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,699评论 0 13
  • 在python中,is检查两个对象是否是同一个对象,而==检查他们是否相等. 例如 p = [1]q = [1]p...
    yorickshan阅读 3,579评论 0 0
  • 01. 最近支付宝推出的集五福活动,朋友圈、群聊几乎都在扫码集福。这个缺爱国但有和谐,那个缺和谐但有爱国,这样我们...
    一只森女阅读 4,453评论 4 10
  • 沟通大师课后小组聚会——风雨无阻来看你 武汉的雨一阵一阵下不停,果然不负东方威尼斯的美名。当然,一诺千金说要出现就...
    严雯阅读 2,801评论 0 1
  • 【0801 晨读感悟 Lorna】如何做最重要的事 【0802 晨读感悟 Lorna】如何才能更有钱? 【0803...
    娜娜_51cf阅读 877评论 0 0