Вопрос37
Осталось:

В чём разница между is и ==?

Образцовый ответ

Показывать ответ по умолчанию

== (сравнение по значению):

Проверяет, равны ли значения двух объектов:

a = [1, 2, 3]
b = [1, 2, 3]

print(a == b)  # True — значения одинаковые

is (сравнение по идентичности):

Проверяет, являются ли две переменные одним и тем же объектом в памяти:

a = [1, 2, 3]
b = [1, 2, 3]

print(a is b)  # False — это разные объекты
print(id(a), id(b))  # Разные адреса в памяти

c = a
print(a is c)  # True — c ссылается на тот же объект

Кеширование малых целых чисел:

Python кеширует целые числа от -5 до 256, поэтому:

x = 100
y = 100
print(x is y)  # True — кешированный объект

x = 1000
y = 1000
print(x is y)  # False — разные объекты

Правило использования:

  • Используйте is только для сравнения с None:
# Правильно
if value is None:
    print("Нет значения")

# Неправильно
if value == None:
    print("Нет значения")
  • Для сравнения значений всегда используйте ==.
  • is проверяет id() объектов — это полезно только для синглтонов (None, True, False).