Выбор ответа Senior Типы, изменяемость и сравнение обновлено
NaN в списке и проверка in
Вопрос
Что вернёт выражение, где x = float("nan")?
x = float("nan")
(x in [x], float("nan") in [x])
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: (True, False). NaN не равен даже сам себе, поэтому x == x ложно.
Варианты ответа
(False, False)(True, False)правильный ответ(True, True)(False, True)
Разбор
NaN не равен даже сам себе, поэтому x == x ложно. Но проверка in для списков сначала сравнивает идентичность (is), а потом равенство, и находит тот же самый объект: x in [x] истинно. Новый объект float("nan") уже другой, и is не сработает, а == ложно. Эта оптимизация «идентичность влечёт равенство» действует в in, count, index и сравнении контейнеров.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.