is 和 ==都可以當(dāng)作運(yùn)算符去比較兩個對象的值是否一致,但是它們有什么區(qū)別呢?
在 Python 中,對象包含的三個基本要素,分別是:id(內(nèi)存地址標(biāo)識)、type(數(shù)據(jù)類型)和 value(值)。
is 運(yùn)算符是同一性運(yùn)算符,用于判斷兩個對象是否相同匹厘,以 id地址為判斷因素。
== 運(yùn)算符是相等運(yùn)算符脐区,用于判斷兩個對象是否相等愈诚,以 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中運(yùn)行和在CMD python解釋器運(yùn)行的結(jié)果不同炕柔,在pycharm中使用is 和 == 返回的都是 True酌泰。
網(wǎng)上大牛的回答:因為運(yùn)行方式不同造成的,這是Cpython在compile time時做的優(yōu)化匕累。