Веб-версияОткрыть в Telegram

СообщениеКеширование небольших чисел в CPython

5 мая 2023
P
Кеширование небольших чисел в CPython Поговорим о небольших числах в CPython. Возьмем, например, два числа, 10 и 300: >>> a = 10 >>> b = 300 >>> a is 10 True >>> b is 300 False Что?! Почему a указыввет на свое значение, а b y нет? Все дело в том, что интерпретатор хранит числа в диапазоне от - 5 до 256 в специальном массиве. Поэтому когда мы пишем x = 10, то вообще-то получаем ссылку на объект, который уже существует в памяти: >>> c = 1 >>> id(1) 94492411548416 >>> id(c) 94492411548416 Причем это касается любых значений, которые приводятся к целым числам этого диапазона. Можно завести число хоть в двоичном виде, хоть в hex, кеширование все равно будет работать: >>> id(19) 94579033949504 >>> id(0b10011) 94579033949504 >>> id(0o23) 94579033949504 >>> id(0x13) 94579033949504 Числа вне диапазона - 5, 256 интерпретатор тоже будет пытаться оптимизировать, но только если они находятся в одной строке (или одном файле). В командной строке интерпретатора так не работает: >>> d = 400 >>> d is 400 False а так будет: >>> e = 500; f = 500 >>> e is f True В общем и целом то, что нужно запомнить -- это что небольшие числа в интерпретаторе хранятся не так, как большие и что с ними следует пользоваться оператором ==, а не is. И это снова не фича, а деталь реализации для экономии ресурсов. 🐍
285 ·

Рядом в ленте

PPYTHON IN DEPTH🐍Грамотно ставим запятые Допустим, у нас в коде есть список: >>> capitals = ['Beijing', 'New Delhi'] Добавим в него ещё город и сделаем diff двух файлов перед ко
это сообщение
PPYTHON IN DEPTH🐍Pythonic циклы Поговорим о циклах в Python. Вот пример цикла, который мог бы написать человек с C или Java бэкграундом: items = [‘a’, ‘b’, ‘c’] i = 0 while i < PPYTHON IN DEPTH🐍Странная переменная в Python. Когда человек впервые видит в программе что-то вроде _, v in my_dict.items(): pass он обычно теряется. Что это за переменная “_”?
🐍🐍Python🪆🐍Python🪆@python_chat_ru · группа · Технологии
20участников39сообщений в индексе
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем