Python中"is"與"=="有什么區(qū)別?

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Python 中 "is" 與 "==" 有什么區(qū)別?,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)長(zhǎng)期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為鎮(zhèn)雄企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都做網(wǎng)站,鎮(zhèn)雄網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

在 Python 中,比較兩個(gè)對(duì)象(變量)是否相等,可以用 “is” 和 “==” 操作,但它倆有什么區(qū)別?什么時(shí)候用 “is”,什么時(shí)候用 “==” ?在面試時(shí),發(fā)現(xiàn)不少候選人很難把這兩者完全說(shuō)清楚,因此在這篇文章中,「Python之禪」將對(duì)二者進(jìn)行深入淺出的對(duì)比介紹。

先舉個(gè)例子

小黃最近手頭非常寬裕,花重金購(gòu)買了一輛 P90D 特斯拉,我們暫且給這車取名叫 “小P” ,這輛車和隔壁老王家的車(車名叫 “小 王”)是一模一樣的,無(wú)論是型號(hào)、外表還是價(jià)格都一樣,是同批次生產(chǎn)的。這里我們可以說(shuō) “小P” 和”小王”是兩輛一模一樣的、相等的(euqal),但本質(zhì)上這是兩個(gè)不同的對(duì)象。有一天小君給他的愛(ài)車又取了一個(gè)網(wǎng)名叫 “愛(ài)駒”,當(dāng)我們說(shuō) “小P” 的時(shí)候其實(shí)就是在討論 “愛(ài)駒”,因?yàn)楸举|(zhì)上兩個(gè)名字指的是同一個(gè)對(duì)象,這里我們把 “小P” 和 “愛(ài)駒” 稱為完全相等的(identical)。

在 Python 中,”==” 和 “is” 的區(qū)別可類比這個(gè)例子 ,前者是相等性比較,比較的是兩個(gè)對(duì)象中的是否相等,后者是一致性比較,比較的是兩個(gè)對(duì)象的內(nèi)存空間地址是否相同。

顯然,如果內(nèi)存地址相同,那么他們的值肯定也是一樣的,因此,如果 “is” 返回 True,那么 “==” 一定也返回 True,反之卻不成立。

talk is cheap, show me the code

先創(chuàng)建一個(gè)列表對(duì)象,然后給它指定一個(gè)名字 a,再定義另外一個(gè)變量 b,讓它指向同一個(gè)對(duì)象。

>>> a = [1, 2, 3]
>>> b = a

a 和 b 打印的值都是相等的,因?yàn)檫@兩個(gè)變量指向的是同一個(gè)對(duì)象,就好比給一輛車起了兩個(gè)不同的名字。

>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

理所當(dāng)然, is 和 == 都返回 True。

>>> a == b
True
>>> a is b
True

創(chuàng)建一個(gè)新的對(duì)象,盡管值是一樣的,但是他們本質(zhì)上是兩個(gè)不同的對(duì)象,處在兩個(gè)不同的內(nèi)存空間,因此 “is” 返回的是 False,但它們的值是相同的,所以 "==" 操作返回 True

>>> c = [1,2,3]
>>> a is c
False
>>> a == c
True

有且當(dāng)僅比較的兩個(gè)變量指向同一個(gè)對(duì)象時(shí) “is” 才返回 True,而 “==” 最終取決于對(duì)象的 __eq__() 方法,本質(zhì)上兩個(gè)變量進(jìn)行 “==” 比較調(diào)用的是對(duì)象的 __eq__() 方法。例如:

>>> class Foo(object):
      def __eq__(self, other):
          return True

>>> f = Foo()
>>> f == 1
True
>>> f == None
True
>>> f is None
False

因?yàn)樽远x類 Foo 的 eq 方法恒返回 True,因此它與任何對(duì)象進(jìn)行 “==” 都是返回 True。而它與 None 是兩個(gè)不同的對(duì)象,因此 ‘is’ 操作返回的是 False。

最后請(qǐng)大家思考這段代碼,為什么同樣的操作會(huì)有不同的結(jié)果

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

上述就是小編為大家分享的Python 中 "is" 與 "==" 有什么區(qū)別?了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享名稱:Python中"is"與"=="有什么區(qū)別?
標(biāo)題URL:http://muchs.cn/article28/gecijp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、定制開(kāi)發(fā)、外貿(mào)建站、關(guān)鍵詞優(yōu)化響應(yīng)式網(wǎng)站、網(wǎng)站收錄

廣告

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

微信小程序開(kāi)發(fā)