Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 24, 2010 06:29:33

Eliont
От:
Зарегистрирован: 2010-05-30
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Разница между is и "==", is not и "!="

Подскажите пожалуйста.

У меня программа реализующая электронную подпись Эль-Гамаля при сравнении полученной и вычисленной подписи при использовании “is” говорит что подписи не совпадают, хотя выведенные в консоль они равны.
При использовании “==” всё работает нормально.



Офлайн

#2 Ноя. 24, 2010 06:42:21

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Разница между is и "==", is not и "!="

>>> 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(объект) возвращает адрес ячейки памяти, на которую указывает объект.



Отредактировано (Ноя. 24, 2010 07:00:28)

Офлайн

#3 Ноя. 24, 2010 09:12:50

Eliont
От:
Зарегистрирован: 2010-05-30
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Разница между is и "==", is not и "!="

Спасибо.
То есть is сравнивает объекты по указателю, точнее, их уникальные идентификаторы, в то время как “==” сравнивает их значения(если они сравнимы) независимо от расположения?



Офлайн

#4 Ноя. 24, 2010 11:06:05

Subideal Ox
От:
Зарегистрирован: 2010-11-23
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Разница между is и "==", is not и "!="

Есть нюанс:

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



Офлайн

#5 Ноя. 24, 2010 12:28:35

Eliont
От:
Зарегистрирован: 2010-05-30
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Разница между is и "==", is not и "!="

Ясно.
Блин, уже полтора года на питоне пишу, а только сейчас узнал.
Как-то не возникало ситуаций где is и == ведут себя по разному.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version