美文网首页
Python中 is 和 == 的区别

Python中 is 和 == 的区别

作者: Sunnky | 来源:发表于2018-08-10 10:54 被阅读0次
    >>> 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表明这两个对象指向同一块内存,值也一定相同。

    相关文章

      网友评论

          本文标题:Python中 is 和 == 的区别

          本文链接:https://www.haomeiwen.com/subject/aflkbftx.html