2010-03-10 5 views
5

Можно создать дубликат:
Python ‘==’ vs ‘is’ comparing strings, ‘is’ fails sometimes, why?Python: Разница между `is` и` == `?

В Python, в чем разница между этими двумя утверждениями:

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 Я не согласен. Связанный вопрос содержит ответ на этот вопрос, но для тех, кто спотыкается о поиске относительно простого ответа на заданный здесь вопрос, связанный вопрос не будет казаться совершенно одинаковым. –

+0

@David: и прошу прошу просить (совсем недавно), вы можете потратить * свое * время, чтобы найти, где это, вопросы, которые имеют одинаковые ответы, являются дубликатами в моей книге. – SilentGhost

ответ

4

== В операторской проверке на равенство

The is испытаний ключевых слов для идентичности объекта; говорим ли мы об одном и том же объекте. Обратите внимание, что несколько переменных могут ссылаться на один и тот же объект.

2

Оператор is сравнивает идентификатор, а оператор == сравнивает значение. По существу x is y такое же, как id(x) == id(y)

0

См here

Операторы является и не тест идентичности объекта: х у истинно тогда и только тогда, когда х и у того же объекта. х у не дает значение обратной истины

1

В целях реализации «ОРП» является плохим примером, но вы не должны использовать это, если вы не хотите, возможность двух одинаковых строк, чтобы оценить ложь:

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

Как уже говорилось, это проверка идентичности, а не равенства. В этом случае у меня есть две отдельные строки с одним и тем же содержимым. Однако, вы не должны зависеть от этого либо:

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

Другими словами, вы должны никогда использование для сравнения строк.

P.S. В Python 2.7.10 >>> odp1 is odp2 возвращает False.

Смежные вопросы