Ответ
Оператор = и оператор is выполняют принципиально разные функции в Python:
| Оператор | Назначение | Проверяет |
|---|---|---|
= |
Присваивание | Сохраняет ссылку на объект в переменную. |
is |
Проверка идентичности | Указывают ли две переменные на один и тот же объект в памяти. |
Ключевое отличие: == проверяет равенство значений (через метод __eq__), а is проверяет идентичность объектов (совпадение id() в памяти).
Практические примеры:
# Пример 1: Присваивание и идентичность
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: значения объектов равны
# Пример 2: Особый случай с None, True, False
x = None
print(x is None) # Идиоматически правильная проверка на None (True)
# print(x == None) # Работает, но менее эффективно и не рекомендуется PEP 8
# Пример 3: Кэширование малых целых чисел (деталь реализации CPython)
a = 100
b = 100
print(a is b) # Может быть True для чисел от -5 до 256
c = 1000
d = 1000
print(c is d) # Чаще False (разные объекты)
Рекомендации по использованию:
- Используйте
isдля проверки наNone,True,False. - Используйте
==для сравнения значений объектов (чисел, строк, списков). - Не полагайтесь на
isдля сравнения числовых или строковых значений, если не уверены в механизме интернирования.