В чем разница между оператором присваивания (=) и оператором `is` в Python?

«В чем разница между оператором присваивания (=) и оператором `is` в Python?» — вопрос из категории Python, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Ключевое отличие: is сравнивает адреса в памяти, а оператор == (равенство) сравнивает значения объектов.

Пример:

list_a = [1, 2, 3]
list_b = list_a          # list_b ссылается на тот же объект
list_c = [1, 2, 3]       # Создается новый объект с такими же значениями

print(list_a is list_b)  # True: это один и тот же объект
print(list_a is list_c)  # False: разные объекты в памяти
print(list_a == list_c)  # True: значения объектов равны

Когда использовать is:

  • Для проверки на None (if value is None).
  • Для сравнения с синглтонами, такими как True, False (хотя для булевых проверок часто предпочтительнее ==).

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