В Python == и is служат принципиально разным целям:
== (оператор равенства) проверяет, имеют ли два объекта одинаковое значениеis (оператор идентичности) проверяет, указывают ли две переменные на один и тот же объект в памятиa = [1, 2, 3]
b = [1, 2, 3]
a == b # True — одинаковое значение
a is b # False — разные объекты в памяти
c = a
a is c # True — обе указывают на один и тот же объект
Используй == при сравнении значений:
Используй is при проверке идентичности объекта:
None — всегда используй a is None вместо a == NoneTrue, False и NonePython кэширует маленькие целые числа и короткие строки, из-за чего is может неожиданно вернуть True:
a = 256
b = 256
a is b # True — из-за кэширования целых чисел в Python (диапазон: -5 до 256)
a = 257
b = 257
a is b # False — вне кэшированного диапазона, разные объекты
Именно поэтому использовать is для сравнения значений ненадёжно и вводит в заблуждение — для этого всегда используй ==.
Используй
==для сравнения значений, используйisтолько для проверки наNoneили идентичность singleton-объектов.
Оператор is — это предпочтительный способ сравнения строк, потому что он проверяет фактическое содержимое, а не полагается на поведение кеширования.
Новый — ещё не проверен сообществом
Вы