is 和 ==都可以当作运算符去比较两个对象的值是否一致,但是它们有什么区别呢?
在 Python 中,对象包含的三个基本要素,分别是:id(内存地址标识)、type(数据类型)和 value(值)。
is 运算符是同一性运算符,用于判断两个对象是否相同,以 id地址为判断因素。
== 运算符是相等运算符,用于判断两个对象是否相等,以 value 为判断因素。
>>> a = '我是a'
>>> b = '我是a'
>>> a is b
False
>>> a == b
True
>>> id(a)
1587859669616
>>> id(b)
1587859671152
>>>
可以看到a 和 b 的值相同所以使用 == 返回的是True , 但是它们的 id地址是不同的使用 is 时就返回了False。
注意:
上面的代码在pycharm中运行和在CMD python解释器运行的结果不同,在pycharm中使用is 和 == 返回的都是 True。
网上大牛的回答:因为运行方式不同造成的,这是Cpython在compile time时做的优化。
网友评论