Задать вопрос
Witosser
@Witosser
студент IT ВУЗа, увлекаюсь веб-разработкой

Почему print(1 == True, 1 is True) вывод будет, True False, если можно по-подробнее?

Я ожидал, что будет ответ True, True, вопрос возник когда я на работе проверял что 1 is True и ожидал положительного результата но условие не проходило. Разве 1 и True имеют не один и тот же адрес памяти, что и проверят is? Теперь я опасаюсь проверять свои условия с помощью конструкции is
  • Вопрос задан
  • 277 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
fenrir1121
@fenrir1121
Начни с документации
Сравнение с None - единственный распространенный случай использования is.
Так же можно использовать если создаешь синглтон и нужно сравнение с ним, но в общем случае лучше всегда используй ==

is сравнивает идентификаторы и можно посмотреть что они не равны
In [28]: id(1)
Out[28]: 140580901756808

In [29]: id(True)
Out[29]: 140580900679488


== сравнивает хэши (если не переопределен __eq__) и можно посмотреть что они равны
In [31]: hash(1)
Out[31]: 1

In [32]: hash(True)
Out[32]: 1
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
is проверяет идентичность, т.е. ссылаются ли два выражения на один и тот же объект.
== проверяет эквивалентность, т.е. равны ли два объекта по содержанию.

При этом == поддаётся переопределению, что позволяет разным объектам по-своему определять понятие равенства. is переопределять нельзя.

Простой пример
a = [1, 2, 3]  # создаём список
b = list(a)  # создаём копию списка
c = a  # создаём еще одну ссылку на список
print(a == b)  # True - содержимое списка и копии равно друг другу
print(a is b)  # False - но это два разных объекта
print(a == c)  # True - объект равен самому себе
print(a is c)  # True - потому что это один и тот же объект
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы