慕田峪4524236
2019-05-24 16:16:32
為什么使用'=='或'is'比較字符串有時會產(chǎn)生不同的結(jié)果?我有一個Python程序,其中兩個變量設(shè)置為該值'public'。在條件表達(dá)式中,我的比較var1 is var2失敗了,但是如果我將其更改為var1 == var2它則返回True?,F(xiàn)在,如果我打開我的Python解釋器并進(jìn)行相同的“是”比較,它就會成功。>>> s1 = 'public'>>> s2 = 'public'>>> s2 is s1True我在這里錯過了什么?
4 回答

慕姐8265434
TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個贊
is是身份測試,==是平等測試。您的代碼中會發(fā)生什么,將在解釋器中模擬如下:
>>> a = 'pub'
>>> b = ''.join(['p', 'u', 'b'])
>>> a == b
True
>>> a is b
False
所以,難怪他們不一樣,對吧?
換句話說:is是id(a) == id(b)

慕少森
TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個贊
最后要注意的是,您可以使用實(shí)習(xí)函數(shù)來確保您獲得對同一字符串的引用:
>>> a = intern('a')
>>> a2 = intern('a')
>>> a is a2
True
如上所述,您可能不應(yīng)該做的是確定字符串上的相等性。但這可能有助于了解您是否有某種奇怪的要求使用is。
請注意,實(shí)習(xí)函數(shù)已從內(nèi)置函數(shù)轉(zhuǎn)移到sysPython 3 的模塊中。
添加回答
舉報
0/150
提交
取消