tgoop.com/pythonl/4911
Create:
Last Update:
Last Update:
🧩 Задача для разминки
Что выведет этот код? Попробуй догадаться без запуска.
class Sneaky:
def __eq__(self, other):
print("Comparing!")
return True
a = Sneaky()
b = [a]
print(a in b)
print(a == b[0])
print(b.count(a))
🤔 Подумай: сколько раз вызовется eq?
🎯 Разбор:
print(a in b)
🔍 Проверка a in b вызывает b.__contains__(a), который по умолчанию использует ==.
👉 Вызовется eq, будет True.
print(a == b[0])
🔍 Прямое сравнение — снова eq.
print(b.count(a))
🔍 list.count сравнивает каждый элемент с ==. В нашем списке один элемент — a.
👉 Опять вызывается eq.
Comparing!
True
Comparing!
True
Comparing!
1
📌
🧠 Уловка: Python-списки используют ==, даже если это один и тот же объект! Да, a == a всё равно вызовет __eq__, если он определён.
⚠️ Фишка для интервью:
Можно подменить поведение ==, но is (сравнение идентичности) всегда быстрее и не вызывает магии.
@pythonl
BY Python/ django
Share with your friend now:
tgoop.com/pythonl/4911