Другие ответили на ваш вопрос, но я подробнее расскажу:
Python is
сравнивает идентичность - он задает вопрос "действительно ли это одна вещь - тот же объект, что и другая вещь" (аналогично ==
в Java) Таким образом, бывают случаи, когда использование is
имеет смысл - наиболее распространенным является проверка на None
. Например, foo is None
. Но, в общем, это не то, что вы хотите.
==
, с другой стороны, задает вопрос "является ли эта вещь логически эквивалентной этой другой вещи". Например:
>>> [1, 2, 3] == [1, 2, 3]
True
>>> [1, 2, 3] is [1, 2, 3]
False
И это правда, потому что классы могут определять метод, который они используют для проверки на равенство:
>>> class AlwaysEqual(object):
... def __eq__(self, other):
... return True
...
>>> always_equal = AlwaysEqual()
>>> always_equal == 42
True
>>> always_equal == None
True
Но они не могут определить метод, используемый для проверки личности (т. Е. Они не могут переопределить is
).