Python 中 is 和 == 的区别
我们经常会遇到判断两个变量是否相等的情况,而在 Python 中判断变量是否相等有两种方式:is
和 ==
,到底我们应该使用哪一种呢?看完这篇文章你就能清楚地知道到底该使用哪一种了
先看这一段代码:
1 | foo = 'foo' |
似乎没什么区别啊,那是不是说 is
和 ==
是等价的,用哪种看个人喜好?当然不是,请看下面这个例子:
1 | foo = ['foo'] |
为什么这里 is
和 ==
会得到截然相反的结果?看最后一个例子:
1 | foo = 'foo' |
所以,到这里可以得出我们最后的结论了:
is
实质上是对变量进行id()
求值后的返回值比较,在对值类型的变量进行比较时用is
还是==
,没有区别;在对对象实例进行比较时,如果需要判断两个变量是否是同一个实例的引用,用is
,如果需要判断两个对象实例变量的值是否完全相等,用==
。特别的:如果a == b
为True
,a is b
不一定为True
;如果a is b
为True
,则a == b
一定为True
2016-02-01更新:1
2
3
4nan = float('NaN')
nan_copy = nan
nan_copy == nan # False
nan_copy is nan # True
这个特例不符合上面得出的结论
Author: lxvc
Link: http://lxvc.github.io/2017/01/26/Python中is和-的区别/
License: 知识共享署名-非商业性使用 4.0 国际许可协议