2013-07-10 68 views
3

當我閱讀「學習Python」時,我對使用is運算符感到困惑。是Python中的關鍵字

本書試圖將其解釋爲對同一存儲器地址(A is B,如果True,意味着A和B在相同的存儲器地址中)的測試,但在下面的情況下,該解釋似乎不成立。誰能幫我理解這個功能?

s2='ufysdjkhflakjhsdjkfhasdhfoqwhefuhalskdjfhwuioehfjkasdhfljahsdjwade' 
    s1='ufysdjkhflakjhsdjkfhasdhfoqwhefuhalskdjfhwuioehfjkasdhfljahsdjwade' 
    s1==s2,s1 is s2 
    (True, True) 

    s1='flashmanfdsafsdfasdfsdffgj;djg;alkjdfgl;kajdfl;gjkla;dfjg;lakdfj;' 
    s2='flashmanfdsafsdfasdfsdffgj;djg;alkjdfgl;kajdfl;gjkla;dfjg;lakdfj;' 
    s1==s2,s1 is s2 
    (True, False) 

    s2='ufysdjkhflakjhsdjkfhasdhfoqwhefuhalskdjfhwuioehfjkasdhfljahsdjwade' 
    s1='ufysdjkhflakjhsdjkfhasdhfoqwhefuhalskdjfhwuioehfjkasdhfljahsdjwade' 
    s1==s2,s1 is s2 
    (True, True) 

    s1=';;' 
    s2=';;' 
    s1==s2,s1 is s2 
    (True, False) 

PS:字符串在內存中存在什麼樣的格式?

+5

Python儘量避免在可能和實際的情況下創建新的字符串對象。字符串是不可變的,所以相同的*值*可能是同一個對象,節省內存和CPU時間來分配額外的內存。 –

回答

4

這是CPython(標準Python解釋器)的實現細節,它將在內存中爲一些不可變類型(如字符串和整數)重用相同的數據。您不能依賴這種行爲,因此您應始終使用==來比較這些類型。

爲了更深入的回答,請參閱https://stackoverflow.com/a/15541556/1544347

1

爲基準進行比較,「==」是對「EQ」梅索德語法糖。

因此,當您使用「==」進行測試時,兩個字符串的值必須等於true。 如果使用「is」進行測試,則對象必須具有相同的引用。