Ошибка: если для элементов массива не предусмотрен инициализатор

is и is not - два тождественных оператора в Python. Оператор is не сравнивает значения переменных, а сравнивает тождества переменных. Рассмотрим это:

>>> a = [1,2,3]
>>> b = [1,2,3]
>>> hex(id(a))
'0x1079b1440'
>>> hex(id(b))
'0x107960878'
>>> a is b
False
>>> a == b
True
>>>

В приведенном выше примере показано, что идентификатор (также может быть адресом памяти в Cpython) отличается как для a, так и b (хотя их значения одинаковы ). Вот почему, когда вы говорите a is b, он возвращает false из-за несоответствия в тождествах обоих операндов. Однако, когда вы говорите a == b, он возвращает true, потому что операция == проверяет, имеет ли оба операнда одно и то же значение, присвоенное им.

Интересный пример (для дополнительной оценки):

>>> del a
>>> del b
>>> a = 132
>>> b = 132
>>> hex(id(a))
'0x7faa2b609738'
>>> hex(id(b))
'0x7faa2b609738'
>>> a is b
True
>>> a == b
True
>>>

В приведенном выше примере, хотя a и b являются двумя разными переменными, a is b возвращен True. Это связано с тем, что тип a является int, который является неизменным объектом. Таким образом, python (я думаю, чтобы сохранить память) выделил тот же объект b, когда он был создан с тем же значением. Таким образом, в этом случае идентичности согласованных переменных и a is b оказались True.

Это применимо ко всем неизменяемым объектам:

>>> del a
>>> del b
>>> a = "asd"
>>> b = "asd"
>>> hex(id(a))
'0x1079b05a8'
>>> hex(id(b))
'0x1079b05a8'
>>> a is b
True
>>> a == b
True
>>>

Надеюсь, что помогает.

0
задан Berkay Yıldız 13 July 2018 в 15:08
поделиться

0 ответов

Другие вопросы по тегам:

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