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

2022-04-14  本文已影响0人  itsenlin

引子

在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关键字有为什么 有时候与==表达式的结果一样,有时候不一样呢?

对比

先看下两者的区别:

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

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

例外

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

>>> a = float('NaN')
>>> a is a
True
>>> a == a
False
>>>
上一篇下一篇

猜你喜欢

热点阅读