Хотя все эти ответы, которые основаны на реализации сравнения указателей возражений и сравнения значений, скорее всего, правильны, существует более глубокая синтаксическая причина использования is
для определения, является ли значение переменной None
(в булевой логике, часто представляемой как NULL
).
В реляционной базе данных и других логических системах NULL
подразумевает, что фактическое значение «неизвестно». Таким образом, логическое выражение xx == NULL
всегда должно принимать само значение NULL
, поскольку невозможно узнать, совпадает ли xx
, какое бы значение оно ни имело, с неизвестным значением. В языках программирования, которые более строго придерживаются правил булевой логики, xx == NULL
(или Pythonically xx == None
) правильно оценивается как NULL
, и должны быть предоставлены альтернативные средства, чтобы определить, является ли значение переменной NULL
. В этом отношении Python выделяется из-за унитарного характера ссылки на объект None
. Но для ясности и логической корректности использование оператора сравнения Python is
кажется мне более разумной практикой.