Python中 is 和 == 的區(qū)別

現(xiàn)象

1 + 1 == 2

1 + 1 is 2

True
True

運(yùn)行以上兩段代碼的話,所得到的結(jié)果都會(huì)是True。這么看起來(lái) == 和 is 的功能貌似是一樣的。

l1 = [1, 2, 3, 4]
l2 = [1, 2, 3, 4]
print(l1 == l2)
print(l1 is l2)

True
False

以上的代碼,== 打印的 True ,而 is 打印的 False 。這么看 == 和 is 還是有區(qū)別的。

先說(shuō)結(jié)論

  • == 判斷的是兩個(gè)對(duì)象的值是否相等
  • is 判斷的是兩個(gè)對(duì)象的內(nèi)存地址是否相等
  • 在值相同的情況下,可變對(duì)象的內(nèi)存地址不同,不可變對(duì)象的內(nèi)存地址相同

什么意思

== 判斷的是兩個(gè)對(duì)象的值是否相等

像上面的第二個(gè)例子,l1 和 l2 的值長(zhǎng)得就完全一樣,所以他們 == 的比較結(jié)果就是 True。說(shuō)白了 == 兩邊只要長(zhǎng)得完全一樣那返回的結(jié)果就是 True ,反之返回False。唯一有些不同的是數(shù)字,不光比較長(zhǎng)相,還比較最后的運(yùn)算結(jié)果。

is 判斷的是兩個(gè)對(duì)象的內(nèi)存地址是否相等

通過(guò)內(nèi)置函數(shù)id()可以查看對(duì)象在內(nèi)存中的地址。is 判斷的就是這兩個(gè)對(duì)象的內(nèi)存地址,而不管他們的值是否相同。長(zhǎng)得不同的對(duì)象,它們的內(nèi)存地址肯定也不同。長(zhǎng)得相同的對(duì)象,他們的內(nèi)存地址也不一定相同。當(dāng)然,數(shù)字依然要看最后的計(jì)算結(jié)果。

在值相同的情況下,可變對(duì)象的內(nèi)存地址不同,不可變對(duì)象的內(nèi)存地址相同

可變對(duì)象包括:列表、字典、集合。不可變對(duì)象包括:字符串、元祖、數(shù)字。還是上面第二個(gè)例子。雖然 l1 和 l2 長(zhǎng)的完全一樣,也就是值相同。但是,列表是一個(gè)可變對(duì)象,通過(guò)id函數(shù)可以知道他們的內(nèi)存地址是并不相等的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容