Этот интересный фрагмент кода был доведен до моего внимания читателя 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 и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.