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

Кеш малых целых в CPython

Вопрос

Почему в CPython a = 256; b = 256; a is b обычно даёт True, а для больших чисел результат может быть False?

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

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

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

Коротко

Правильный ответ: CPython кеширует целые от -5 до 256. CPython держит кеш маленьких целых, поэтому все 256 указывают на один объект.

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

  1. is для маленьких чисел сравнивает значения
  2. Все целые числа в Python синглтоны
  3. CPython кеширует целые от -5 до 256правильный ответ
  4. Числа больше 256 хранятся как float

Разбор

CPython держит кеш маленьких целых, поэтому все 256 указывают на один объект. Для больших чисел могут создаваться разные объекты (а в одном блоке кода компилятор иногда их объединяет как константы), поэтому результат is непредсказуем. Отсюда правило: числа и строки сравнивают через ==. is никогда не сравнивает значения, синглтонами числа не являются, а int не превращается во float.

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

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

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