python語言中的==和is有什么不同

本篇內(nèi)容主要講解“python語言中的 == 和 is 有什么不同”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“python語言中的 == 和 is 有什么不同”吧!

成都創(chuàng)新互聯(lián)是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅(jiān)持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過去的10余年時(shí)間我們累計(jì)服務(wù)了上千家以及全國政企客戶,如木托盤等企業(yè)單位,完善的項(xiàng)目管理流程,嚴(yán)格把控項(xiàng)目進(jìn)度與質(zhì)量監(jiān)控加上過硬的技術(shù)實(shí)力獲得客戶的一致稱譽(yù)。

對于這兩個(gè)運(yùn)算符的理解,可以在很大程度上體現(xiàn)一個(gè)人對python的精通程度,說道他們的不同,可以總結(jié)為以下兩點(diǎn)

  1. == 是比較關(guān)系運(yùn)算符,is 是身份運(yùn)算符

  2. == 比較兩個(gè)對象的值是否相等,is 比較的是兩個(gè)對象的內(nèi)存地址是否相同

在實(shí)際應(yīng)用中,對這兩個(gè)運(yùn)算符的使用,往往讓人感到困惑不解

a = [1]
b = [1]

print(a == b)
print(a is b)

程序輸出的結(jié)果

True
False

對于a == b 這個(gè)表達(dá)式的結(jié)果,應(yīng)該沒有什么異議,分歧和不解出現(xiàn)在第二個(gè)表達(dá)式a is b, is 身份運(yùn)算符比較的是兩個(gè)對象的內(nèi)存地址,顯然,變量a 與b所指向的列表的內(nèi)存地址是不同的。

python語言中的 == 和 is 有什么不同

在你使用賦值語句時(shí),解釋器會在內(nèi)存中創(chuàng)建一個(gè)列表[1], 這個(gè)創(chuàng)建過程發(fā)生了兩次,他們的內(nèi)存地址不同,正因a 和b是兩個(gè)不同的列表,他們才能分別存儲數(shù)據(jù)而不會互相影響,所以,理解這個(gè)問題的關(guān)鍵在于,當(dāng)a = [1] 這行代碼被執(zhí)行時(shí),在內(nèi)存中創(chuàng)建了一個(gè)新的列表[1]。

內(nèi)存池

好奇心強(qiáng)的人,可能會立即寫代碼實(shí)驗(yàn),來驗(yàn)證前面所講

a = [1]
b = [1]

print(id(a), id(b))

程序輸出結(jié)果

4714131208 4714127880

內(nèi)置函數(shù)id()可以返回對象的內(nèi)存地址,他們果然不相同,但是,事情總有蹊蹺,下面的代碼就無法用前面所講的理論來解釋

a = 1
b = 1

print(a == b)
print(a is b)

程序輸出結(jié)果

True
True

按照前面所講,兩次執(zhí)行賦值語句,應(yīng)該在內(nèi)存中創(chuàng)建出兩個(gè)1啊,他們的內(nèi)存地址應(yīng)該不同,a is b 的結(jié)果應(yīng)該是False,但實(shí)際運(yùn)行代碼得到的卻是True,這是為何?

不同于列表,int類型數(shù)據(jù)是不可變數(shù)據(jù),兩個(gè)變量同時(shí)指向一個(gè)int類型數(shù)據(jù)不會產(chǎn)生意外的后果,因此python使用了內(nèi)存池技術(shù),python的設(shè)計(jì)者認(rèn)為-5到256這個(gè)范圍內(nèi)的整數(shù)是經(jīng)常被使用的,不應(yīng)該頻繁的創(chuàng)建和銷毀,因此建立了一個(gè)內(nèi)存池,-5到256之間的數(shù)只會存在一個(gè),任何時(shí)候使用他們,所用的都是內(nèi)存池中的那一個(gè),不會重新創(chuàng)建,因此他們的內(nèi)存地址相同。

交互式解釋器

如果你仍然保持強(qiáng)烈的好奇心,那么你可能會繼續(xù)試驗(yàn),來驗(yàn)證前面的理論

a = 257
b = 257

print(a == b)
print(a is b)

程序輸出結(jié)果

True
True

又一次感到困惑,不是說好了-5到256在內(nèi)存池中,現(xiàn)在用的是257,為啥a is b的結(jié)果也是True?

這段代碼,想要得到理論的結(jié)果,必須在python交互式解釋器中執(zhí)行,如果你是在pycharm中執(zhí)行,或者通過python命令執(zhí)行腳本的方式執(zhí)行,所得結(jié)果都為True,原因在于通過這些方式運(yùn)行時(shí),在編譯階段會做優(yōu)化,因?yàn)閷?shí)在沒必要?jiǎng)?chuàng)建出兩個(gè)257。

如果在python交互式解釋器中運(yùn)行這段代碼,就可以見證理論的正確性

>>> a = 257
>>> b = 257
>>> a == b
True
>>> a is b
False

到此,相信大家對“python語言中的 == 和 is 有什么不同”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)頁標(biāo)題:python語言中的==和is有什么不同
轉(zhuǎn)載來源:http://bm7419.com/article34/jcicpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃響應(yīng)式網(wǎng)站、服務(wù)器托管、全網(wǎng)營銷推廣、搜索引擎優(yōu)化App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)