Когда люди говорят, что наборы имеют O (1) проверку членства, они говорят о среднем случае. В наихудшем случае (когда все хэшированные значения сталкиваются) проверка членства - это O (n). Смотрите вики Python о сложности времени .
В статье Википедии говорится, что лучшая сложность времени для хеш-таблицы без изменения размера O(1 + k/n). Этот результат не применяется напрямую к наборам Python, поскольку наборы Python используют хеш-таблицу с изменяемым размером.
Чуть дальше по статье Википедии говорится , что для среднего случая, и предполагая простую функцию хэширования равномерного, время сложность O(1/(1-k/n)), где k/nможет быть ограничена константой c<1.
Big-O относится только к асимптотическому поведению при n → ∞. Так как k / n может быть ограничено константой, c <1, независимо от n ,
O(1/(1-k/n))не больше, чем O(1/(1-c))эквивалентно O(constant)= O(1).
Таким образом, при условии равномерного простого хеширования, проверка членства для наборов Python в среднем такова O(1).
setреализация на самом деле былаdictс фиктивными значениями, и позже она была оптимизирована.