美文网首页
python学习笔记之--关键字is与==

python学习笔记之--关键字is与==

作者: itsenlin | 来源:发表于2022-04-14 22:05 被阅读0次

    引子

    在python中比较两个对象是否相等时有两个处理方式:使用is关键字;使用符号==。但是有时候两种方式的结果是一样的,有时候两者的结果不一样,例如下面
    字符串:

    >>> a = "hello"
    >>> b = "hello"
    >>> a == b
    True
    >>> a is b
    True
    >>> c = "I am using a long string for testing"
    >>> d = "I am using a long string for testing"
    >>> c is d
    False
    >>> c == d
    True
    >>>
    

    数值:

    >>> e = 1
    >>> f = 1
    >>> e is f
    True
    >>> e == f
    True
    >>> g = 100000
    >>> f = 100000
    >>> g is f
    False
    >>> g == f
    True
    >>> 
    

    从结果来看很显然==符号的结果是我们想要的,但是is关键字有为什么 有时候与==表达式的结果一样,有时候不一样呢?

    对比

    先看下两者的区别:

    • is,是python语言的关键字,主要是对比两个对象的内在地址是否一样,也即两个对象指向同一块地址。相当于调用id(),不能被重载。
    • ==,是一种逻辑判断符号,主要是对比两个对象的内容是否一样。相当于调用__eq__(),可以被重载。

    从两者的区别可以知道,两者的结果不一样的原因根本就是判断的内容不一样

    但是为什么有时候两者的结果又一样呢?
    这个就是python语言的一个机制了,为了提高性能,对于较小的数字、较短的字符串会在内在中保留对应值的一个副本,当创建新的字符串、数值变量时直接指向该副本即可(否则就是每创建一个对象都会保存在一个单独的内存)。

    例外

    从引子中的例子看,应该是x is y必定有x == y
    理论上是对的,有一个例外情况,就是float类型的NaN,如下

    >>> a = float('NaN')
    >>> a is a
    True
    >>> a == a
    False
    >>>
    

    相关文章

      网友评论

          本文标题:python学习笔记之--关键字is与==

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