Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
1. Любые данные в Python это об<ъекты.
2. Если объекты «одинаковы», то они хранятся по одному адресу в памяти. Иными словами, a == b и id(a) == id(b) это эквивалентные утверждения.
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a == b
True
>>> id(a) == id(b)
FalseПод катом — статья про то как в Python реализовано хранение данных в памяти
Более сложной оптимизации не используется
print(id(257))
print(id(257))
Иными словами, a == b и id(a) == id(b) это эквивалентные утверждения.
__eq__ любым угодным вам способом. Другой вопрос, что в ряде мест (к примеру, при сравнении списков) применяется сравнение id() перед сравнением объектов: есть известный пример с NaN, или вот ещё:Python 2.7.8 (a980ebb26592ed26706cd33a4e05eb45b5d3ea09, Nov 28 2014, 06:20:07)
[PyPy 2.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>> class NE(object):
.... def __eq__(self, other):
.... return False
....
>>>> n = NE()
>>>> [1, 2, n] == [1, 2, n]
True
>>>> n == n
FalseFalse, но у него всегда были проблемы с совместимостью.
Память и числа в Python