在Python中,判斷兩個(gè)對(duì)象是否相等有多種方式,可以用“==”運(yùn)算符、is運(yùn)算符、id函數(shù)等方法進(jìn)行比較。
a = [1, 2] b = [1, 2] c = a print(a == b) # 輸出 True,因?yàn)閍和b的內(nèi)容相同 print(a is b) # 輸出 False,因?yàn)閍和b是不同的對(duì)象 print(a is c) # 輸出 True,因?yàn)閍和c指向同一個(gè)對(duì)象
使用“==”運(yùn)算符比較的是對(duì)象的值是否相等,而is運(yùn)算符比較的是對(duì)象的身份是否相等(即是否指向同一個(gè)內(nèi)存地址)。一般來(lái)說(shuō),當(dāng)需要判斷兩個(gè)對(duì)象是否相等時(shí),使用“==”運(yùn)算符,當(dāng)需要判斷兩個(gè)對(duì)象是否是同一個(gè)對(duì)象時(shí),使用is運(yùn)算符。
a = "hello" b = "hello" print(a == b) # 輸出 True,因?yàn)閍和b的內(nèi)容相同 print(a is b) # 輸出 True,因?yàn)閍和b用了相同的內(nèi)存空間
但是有時(shí)候也會(huì)出現(xiàn)一些奇怪的情況,比如字符串等不可變類(lèi)型變量的判斷:
a = "hello" b = "".join(["h", "e", "l", "l", "o"]) print(a == b) # 輸出 True,因?yàn)閍和b的內(nèi)容相同 print(a is b) # 輸出 False,因?yàn)閍和b有不同的內(nèi)存空間
由于Python中對(duì)于不可變類(lèi)型的優(yōu)化,同一值的字符串或數(shù)值等變量在內(nèi)存中只有一個(gè)實(shí)例,因此只有變量引用相同的情況下,才會(huì)出現(xiàn)is運(yùn)算符判斷為T(mén)rue的情況。