Известно, что в современной реализации CPython следующий код:
x = 5
y = 5даёт две ссылки x и y на один и тот же объект int(5), то есть:
id(x) == id(y)
Найти максимальный диапазон целых чисел [-M, N], для которого вышеобозначенное утверждение верно.
CPython кэширует малые целые числа (small integer cache). При старте
интерпретатора создаётся массив объектов int для чисел из некоторого
непрерывного диапазона [lo, hi], и любое обращение к числу внутри
этого диапазона возвращает ссылку на уже существующий объект.
Достаточно идти от нуля в обе стороны по одному шагу, пока утверждение
id(x) == id(y) выполняется. Как только оно перестало выполняться -
мы нашли границу.
.
├── main.py # решение задачи
├── test_main.py # тесты
├── requirements.txt # зависимости
├── .gitignore
└── README.md
git clone https://github.com/spbstu-python-labs-sem5/task-1-int-optimization.git
cd task-1-int-optimizationpython3 -m venv .venv
source .venv/bin/activate # Linux / macOS
# .venv\Scripts\activate # Windowspip install -r requirements.txtФайл requirements.txt содержит:
pytest==8.3.4
python3 main.pyОжидаемый вывод:
Диапазон: [-5, 256]
M = 5, N = 256
pytest -vОжидаемый вывод:
test_main.py::test_known_range PASSED
test_main.py::test_boundaries PASSED