Выбор ответа Senior Типы, изменяемость и сравнение обновлено

NaN в списке и проверка in

Вопрос

Что вернёт выражение, где x = float("nan")?

x = float("nan")
(x in [x], float("nan") in [x])

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: (True, False). NaN не равен даже сам себе, поэтому x == x ложно.

Варианты ответа

  1. (False, False)
  2. (True, False)правильный ответ
  3. (True, True)
  4. (False, True)

Разбор

NaN не равен даже сам себе, поэтому x == x ложно. Но проверка in для списков сначала сравнивает идентичность (is), а потом равенство, и находит тот же самый объект: x in [x] истинно. Новый объект float("nan") уже другой, и is не сработает, а == ложно. Эта оптимизация «идентичность влечёт равенство» действует в in, count, index и сравнении контейнеров.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме