Если кортежи работают лучше, чем списки, почему замороженные наборы не работают лучше, чем наборы?

Я ожидал, что frozenset будет работать лучше, чем set, потому что первые неизменяемы. Однако, когда я посмотрел это, в ответах просто говорилось, что наборы и frozenset просто содержат много одинаковых реализаций. Что заставляет tuple работать лучше, чем list, а frozenset не может подражать set?


person Alec    schedule 10.04.2019    source источник
comment
Разница, вероятно, связана с тем, что оба набора (и dict) используют массив с превышением доступности для базовой хеш-таблицы, чтобы уменьшить коллизии хэшей. В принципе, они все одинаковые. Кортежу, поскольку он неизменяем, не нужно выделять больше памяти, чем ему абсолютно необходимо для хранения заданных значений, в то время как список должен перераспределять память по мере своего роста.   -  person chepner    schedule 10.04.2019
comment
Тем не менее, что именно вы подразумеваете под лучшей производительностью?   -  person chepner    schedule 10.04.2019
comment
производительность поиска, как в этом вопросе: stackoverflow.com/questions/36555214/   -  person Alec    schedule 10.04.2019
comment
Поиск в обоих типах наборов выполняется в хеш-таблице. Вы вычисляете хэш элемента, а затем смотрите, есть ли что-нибудь в соответствующем месте. Является ли набор изменяемым или нет, это не влияет на работу хеш-таблицы.   -  person chepner    schedule 10.04.2019
comment
используя тот же алгоритм для проверки производительности между списком и кортежем, я получаю ближайший результат в ipython для списка %timeit [x for x in l1 if x in l1] дай мне 6.6 ms ± 45.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) для кортежа %timeit [x for x in t1 if x in t1] дай мне 6.53 ms ± 64.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) где l1 - это список, а t1 - это кортеж списка.   -  person Brown Bear    schedule 10.04.2019
comment
Просто хочу упомянуть об этом: нет соответствующей разницы во времени поиска для списков и кортежей. Основное преимущество кортежей заключается в том, что они используют меньше памяти, поскольку нет необходимости перераспределять ресурсы в ожидании дополнений в ближайшем будущем.   -  person chepner    schedule 10.04.2019