Выбор ответа Middle Типы, изменяемость и сравнение обновлено
Кеш малых целых в CPython
Вопрос
Почему в CPython a = 256; b = 256; a is b обычно даёт True, а для больших чисел результат может быть False?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: CPython кеширует целые от -5 до 256. CPython держит кеш маленьких целых, поэтому все 256 указывают на один объект.
Варианты ответа
isдля маленьких чисел сравнивает значения- Все целые числа в Python синглтоны
- CPython кеширует целые от -5 до 256правильный ответ
- Числа больше 256 хранятся как
float
Разбор
CPython держит кеш маленьких целых, поэтому все 256 указывают на один объект. Для больших чисел могут создаваться разные объекты (а в одном блоке кода компилятор иногда их объединяет как константы), поэтому результат is непредсказуем. Отсюда правило: числа и строки сравнивают через ==. is никогда не сравнивает значения, синглтонами числа не являются, а int не превращается во float.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.