Рубрики
Без рубрики

Питона Небольшая целочисленная кэширование:

Этот интересный фрагмент кода был доведен до моего внимания читателя Finxter Albrecht. A, 250 для I в пределах (250, 260): если a это не B: разбить a b Распечатать (а) # Как вывод этого кода фрагмент? Вы догадаетесь, что для цикла идет от того, … Python Small Integer Caching: Подробнее »

Автор оригинала: Chris.

Этот интересный фрагмент кода был доведен до моего внимания читателя Finxter Albrecht.

a, b = 250, 250
for i in range(250, 260):
    if a is not b:
        break
    a += 1
    b += 1
print(a)
# What's the output of this code snippet?

Вы догадаетесь, что для цикла идет от I = 250 к I = 259 каждый раз увеличивает А и B Отказ Поскольку Python создает один целочисленный объект, к которому относятся оба имена, команда а не б всегда должен быть Ложь Отказ Таким образом, результат является A = 259 , верно?

НЕПРАВИЛЬНЫЙ!!! $% &&% $

Попробуйте сами в нашем интерактивном коде раковину:

Упражнение : Запустите код и проверьте результат. Вы ожидали этого?

Результат есть A = 257. .

Причина – это деталь осуществления Реализация Cpython называется «Небольшая целочисленная кэширование» – внутренний кеш целых чисел в Python.

Если вы создаете целочисленный объект, который попадает в диапазон -5 до 256, Python вернет только ссылку на этот объект – который уже кэшируется в памяти.

«Текущая реализация сохраняет массив целочисленных объектов для всех целых чисел от -5 до 256, когда вы создаете INT в этом диапазоне, вы фактически просто верните ссылку на существующий объект».

Вы можете визуализировать выполнение кода в этом интерактивном визуализации памяти:

Упражнение : Нажмите Далее, пока не увидим результат. Сколько целых чисел в памяти?

Давайте быстро рассмотрим значение «is» в Python.

Это оператор

это оператор Проверяет, если две переменные имена указывают на тот же объект в памяти:

>>> a = "hello"
>>> b = "hello"
>>> a is b
True

Обе переменные А и B Укажите на строку "Привет" Отказ Python не хранит одну и ту же строку дважды, но создает его только один раз в памяти. Это сохраняет память и делает Python быстрее и эффективнее. И это не проблема, потому что строки неизменны – поэтому одна переменная не может «омрачивать» строковый объект другой переменной.

Обратите внимание, что мы можем использовать ID () Функция для проверки целочисленного представления адреса памяти:

>>> a = "hello"
>>> b = "hello"
>>> id(a)
1505840752992
>>> id(b)
1505840752992

Они оба указывают на одно и то же место в памяти! Поэтому это Оператор возвращает Правда !

Небольшая целочисленная кэширование

Опять же, если вы создаете целочисленный объект, который попадает в диапазон -5 до 256, Python вернет только ссылку на этот объект – который уже кэшируется в памяти. Но если мы создадим целочисленный объект, который не попадает в этот диапазон, Python может вернуть новый целочисленный объект с тем же значением.

Если мы сейчас проверим а не б Python даст нам правильный результат Правда Отказ

На самом деле это приводит к странному поведению реализации C Python 3:

>>> a = 256
>>> b = 256
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a is b
False

Поэтому вы всегда должны сравнивать целые числа, используя == Оператор в Python. Это гарантирует, что Python выполняет семантическое сравнение, а не простое сравнение адреса памяти:

>>> a = 256
>>> b = 256
>>> a == b
True
>>> a = 257
>>> b = 257
>>> a == b
True

Что вы можете узнать из этого? Детали внедрения имеют значение!

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.