Оператор is в Python

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

Основное использование

В этом шаге мы начнем с самого базового использования оператора is.

  1. Откройте интерпретатор Python в терминале.
python3
  1. Определите две переменные, a и b, и присвойте им одинаковое значение.
a = "Hello"
b = "Hello"
  1. Выведите адрес в памяти a и b с использованием функции id().
print(id(a))
print(id(b))
  1. Используйте оператор is, чтобы проверить, ссылаются ли a и b на один и тот же объект.
print(a is b)

Результат выполнения кода выше должен быть True, так как a и b ссылаются на один и тот же объект в памяти.

Неизменяемые против изменяемых объектов

В этом шаге мы исследуем, как оператор is ведет себя с неизменяемыми и изменяемыми объектами.

  1. Определите две переменные, c и d, и присвойте им оба пустой список [].
c = []
d = []
  1. Выведите адрес в памяти c и d с использованием функции id().
print(id(c))
print(id(d))
  1. Используйте оператор is, чтобы проверить, ссылаются ли c и d на один и тот же объект.
print(c is d)

Результат выполнения кода выше должен быть False, так как c и d - изменяемые объекты, и они не являются одним и тем же объектом в памяти.

  1. Теперь определите две переменные, e и f, и присвойте им оба целочисленное значение.
e = 10
f = 10
  1. Выведите адрес в памяти e и f с использованием функции id().
print(id(e))
print(id(f))
  1. Используйте оператор is, чтобы проверить, ссылаются ли e и f на один и тот же объект.
print(e is f)

Результат выполнения кода выше должен быть True, так как e и f - неизменяемые объекты, и они используют один и тот же объект в памяти.

Параметры функций

В этом шаге мы исследуем, как оператор is можно использовать с параметрами функций.

  1. Определите функцию my_function(), которая принимает два параметра, x и y.
def my_function(x, y):
    print(x is y)
  1. Вызовите функцию my_function() дважды, один раз с неизменяемыми объектами, а другой раз с изменяемыми объектами.
my_function(10, 10)
my_function([], [])

Результат первого вызова должен быть True, а результат второго вызова должен быть False.

Расширенное использование

В этом шаге мы исследуем некоторые аспекты расширенного использования оператора is.

  1. Определите класс MyClass с атрибутом value.
class MyClass:
    def __init__(self, value):
        self.value = value
  1. Определите два экземпляра класса MyClass, obj1 и obj2, с одинаковым значением value.
obj1 = MyClass("Hello")
obj2 = MyClass("Hello")
  1. Выведите адрес в памяти obj1.value и obj2.value с использованием функции id().
print(id(obj1.value))
print(id(obj2.value))
  1. Используйте оператор is, чтобы проверить, ссылаются ли obj1.value и obj2.value на один и тот же объект.
print(obj1.value is obj2.value)

Результат выполнения кода выше должен быть True, так как атрибут value является неизменяемым объектом, и оба экземпляра используют один и тот же объект в памяти.

  1. Теперь определите два экземпляра класса MyClass, obj3 и obj4, с изменяемым объектом в качестве значения value.
obj3 = MyClass([])
obj4 = MyClass([])
  1. Выведите адрес в памяти obj3.value и obj4.value с использованием функции id().
print(id(obj3.value))
print(id(obj4.value))
  1. Используйте оператор is, чтобы проверить, ссылаются ли obj3.value и obj4.value на один и тот же объект.
print(obj3.value is obj4.value)

Результат выполнения кода выше должен быть False, так как атрибут value является изменяемым объектом, и оба экземпляра не используют один и тот же объект в памяти.

Резюме

В этом практическом занятии мы изучили оператор is в Python и то, как его можно использовать для проверки, ссылаются ли две переменные на один и тот же объект в памяти. Мы исследовали поведение оператора is как с неизменяемыми, так и с изменяемыми объектами, параметрами функций и экземплярами классов. Изучив оператор is, мы можем писать более эффективный и надежный код на Python.