Найти - Пользователи
Полная версия: Разница между is и "==", is not и "!="
Начало » Python для новичков » Разница между is и "==", is not и "!="
1
Eliont
Подскажите пожалуйста.

У меня программа реализующая электронную подпись Эль-Гамаля при сравнении полученной и вычисленной подписи при использовании “is” говорит что подписи не совпадают, хотя выведенные в консоль они равны.
При использовании “==” всё работает нормально.
Isem
>>> a = 1234
>>> b = a
>>> a is b
True
>>> b += 0
>>> a is b
False
>>>a==b
True
>>>
В первом случае a и b ссылаются на один и тот же объект - число 1234.
Во втором случае b уже ссылается на другой объект, хотя численно эти объекты (третий случай) и равны.

Вообще, операция
a is b
эквивалентна
id(a) == id(b)
Функция id(объект) возвращает адрес ячейки памяти, на которую указывает объект.
Eliont
Спасибо.
То есть is сравнивает объекты по указателю, точнее, их уникальные идентификаторы, в то время как “==” сравнивает их значения(если они сравнимы) независимо от расположения?
Subideal Ox
Есть нюанс:

In [1]: a = 1

In [2]: b = a

In [3]: a is b
Out[3]: True

In [4]: b +=0

In [5]: a is b
Out[5]: True
Потому что python кэширует часто используемые базовые типы. Так что на is в случаее базовых типов лучше не полагаться (с другой стороны, зачем это может понадобиться, не знаю).

SO
Eliont
Ясно.
Блин, уже полтора года на питоне пишу, а только сейчас узнал.
Как-то не возникало ситуаций где is и == ведут себя по разному.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB