Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
01 Июл 2023
2 мин
1851

Оператор «is» и его неожиданное поведение с целыми числами в Python

В языке программирования Python есть два оператора для сравнения: == и is. Оператор == используется для сравнения значений двух переменных, в то время как

В языке программирования Python есть два оператора для сравнения: == и is. Оператор == используется для сравнения значений двух переменных, в то время как оператор is используется для проверки, являются ли две переменные одним и тем же объектом.

Вот простой пример:

a = 5
b = 5
print(a == b)  # Вывод: True
print(a is b)  # Вывод: True

В данном случае, оба оператора возвращают True, поскольку a и b имеют одно и то же значение (5), и они оба ссылаются на один и тот же объект в памяти.

Однако, стоит быть осторожными при использовании оператора is с целыми числами. Рассмотрим следующий пример:

a = 257
b = 257
print(a == b)  # Вывод: True
print(a is b)  # Вывод: False

В данном случае, оператор == возвращает True, так как a и b имеют одно и то же значение (257). Но оператор is возвращает False, поскольку a и b ссылаются на разные объекты в памяти.

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

Но когда вы присваиваете переменным числа вне этого диапазона, Python создает новый объект для каждого числа. Именно поэтому переменные a и b во втором примере не ссылаются на один и тот же объект, даже если их значения равны.

В целом, рекомендуется использовать оператор == для сравнения значений переменных, а не оператор is. Оператор is следует использовать только при сравнении объектов с None, или когда вы точно знаете, что сравниваете идентичность объектов, а не их значения.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий