Как Python list.remove() работает внутри?
Например, при добавлении в наборы Java Java сравнивает методы hash() и equals(). Python сравнивает метод __eq__() или что-то еще?
Альтернативно, реализация различается? Если да, то какова реализация CPython или Anaconda Python (предположительно CPython)?
Он сравнивается с использованием __eq__, а не __hash__. Попробуйте a=[1, 2, True]; a.remove(True) увидеть.
@КлаусД. Есть ли для этого документация? То есть он проверяет только __eq__(), а не __cmp__() и ничего больше? Например, в этом ответе говорится, что __eq__() при некоторых обстоятельствах по умолчанию используется __cmp__().
Ну, он проверяет __eq__, независимо от того, как это реализовано, если реализация вызывает __cmp__, то так оно и есть.






Из документации метода remove() всех типов изменяемых последовательностей:
s.remove(x)удалите первый элемент изs, гдеs[i]равноx
В общем случае «равно» означает, что оператор == возвращает True, и это вызывает метод __eq__() dunder.
Сравнение с типом Set нецелесообразно, поскольку они обычно реализуются с использованием хэш-таблиц, поэтому сначала используется __hash__() для поиска хеш-корзины. Внутри хеш-корзины __eq__() используется для разрешения коллизий.
он проходит через итерацию, проверяет значение, удаляет, если первое вхождение найдено, в противном случае выдает ошибку значения