Что происходит при совпадении хэша, но несовпадении значения в хэш-таблице
Что проверяют
Понимаете ли вы, что хэш это не ключ, а подсказка, где искать, и что таблица обязана дополнительно сравнить сами ключи. Заодно смотрят, знаете ли вы цену коллизий и контракт между равенством и хэшем.
Как отвечать
Позиция в таблице считается не по хэшу целиком, а по его остатку от размера таблицы, поэтому совпадений слота заметно больше, чем совпадений самого хэша. И то и другое называют коллизией.
Дальше таблица делает ровно то, ради чего хранит ключи: сравнивает их. В CPython сначала идёт сравнение по идентичности (is), это быстрый путь для одного и того же объекта, и только потом __eq__. Не равны, значит поиск продолжается: в схеме с цепочками по списку слота, в открытой адресации по следующей пробе.
Словари и множества в CPython используют именно открытую адресацию: при коллизии следующий индекс считается с участием старших битов хэша, а сам хэш хранится рядом со значением и сверяется первым, что отсекает почти все лишние вызовы __eq__.
Отсюда контракт, который и хотят услышать: равные объекты обязаны иметь равный хэш, обратное не требуется. Свой класс с __eq__, но без __hash__ становится нехэшируемым, и это защита, а не недоработка. Полезно добавить, что хэш строк рандомизирован на каждый запуск процесса, поэтому сохранять его во внешнее хранилище нельзя.
Где спотыкаются
Отвечают «одинаковый хэш значит одинаковый ключ» и опускают проверку равенства. Такая таблица возвращала бы чужое значение, то есть речь идёт о корректности, а не о скорости, и интервьюер обычно упирается именно в это место.
Определяют равенство по полям, а хэш оставляют по умолчанию или считают по полю, которое потом меняют. Объект, положенный в словарь, после изменения такого поля не находится ни по себе самому, ни по копии, хотя визуально всё на месте.
Считают коллизии признаком плохой хэш-функции. Они неизбежны при любой функции просто из-за числа занятых слотов, поэтому таблица растёт заранее, по достижении доли заполнения, а не по факту столкновения.