2010-03-10 22 views
5

Eventuali duplicati:
Python ‘==’ vs ‘is’ comparing strings, ‘is’ fails sometimes, why?Python: Differenza tra `is` e` == `?

In Python, qual è la differenza tra queste due affermazioni:

if x is "odp":

if x == "odp":

+3

dupe http://stackoverflow.com/questions/1504717/python-vs-is-comparing-strings-is-fails-sometimes-why – SilentGhost

+1

@SilentGhost Non sono d'accordo. La domanda collegata contiene la risposta a questa domanda, ma a chiunque inciampi cercando una risposta relativamente semplice alla domanda posta qui, la domanda collegata non sembrerà affatto la stessa. –

+0

@David: e già è stato chiesto molto (anche di recente), sei libero di spendere * il tuo * tempo per trovare dov'è, le domande che hanno le stesse risposte sono duplicate nel mio libro. – SilentGhost

risposta

4

Le prove == operatore di uguaglianza

Le prove is parole-chiave per l'identità oggetto; se stiamo parlando dello stesso oggetto. Si noti che più variabili possono fare riferimento allo stesso oggetto.

2

L'operatore is confronta l'identità mentre l'operatore == confronta il valore. Essenzialmente x is y è uguale id(x) == id(y)

0

Vedi here

Gli operatori è e non è test per l'identità di un oggetto: x è y è vero se e solo se x ed y sono lo stesso oggetto. x non è y cede il valore inversa verità

1

Per ragioni di implementazione, "ODP" è un cattivo esempio, ma non si dovrebbe usare è se non si desidera la possibilità di due stringhe identiche per valutare a false:

>>> lorem1 = "lorem ipsum dolor sit amet" 
>>> lorem2 = " ".join(["lorem", "ipsum", "dolor", "sit", "amet"]) 
>>> lorem1 == lorem2 
True 
>>> lorem1 is lorem2 
False 

Come altri hanno già detto, è l'identità dei test, non l'uguaglianza. In questo caso, ho due stringhe separate con lo stesso contenuto. Tuttavia, non si deve dipendere da questa operazione:

>>> odp1 = "odp" 
>>> odp2 = "".join(["o", "d", "p"]) 
>>> odp1 == odp2 
True 
>>> odp1 is odp2 
True 

In altre parole, si dovrebbe mai uso è quello di confrontare le stringhe.

P.S. In Python 2.7.10 >>> odp1 is odp2 restituisce False.