Набор против производительности Frozenset

Я возился с питономset а такжеfrozenset типы коллекций.

Первоначально я предполагал, чтоfrozenset обеспечит лучшую производительность поиска, чемset, поскольку его неизменный и, следовательно, может использовать структуру хранимых предметов.

Тем не менее, это не относится к следующему эксперименту:

import random
import time
import sys

def main(n):
    numbers = []
    for _ in xrange(n):
        numbers.append(random.randint(0, sys.maxint))
    set_ = set(numbers)
    frozenset_ = frozenset(set_)

    start = time.time()
    for number in numbers:
        number in set_
    set_duration = time.time() - start

    start = time.time()
    for number in numbers:
        number in frozenset_
    frozenset_duration = time.time() - start

    print "set      : %.3f" % set_duration
    print "frozenset: %.3f" % frozenset_duration


if __name__ == "__main__":
    n = int(sys.argv[1])
    main(n)

Я выполнил этот код, используя как CPython, так и PyPy, что дало следующие результаты:

> pypy set.py 100000000
set      : 6.156
frozenset: 6.166

> python set.py 100000000
set      : 16.824
frozenset: 17.248

Кажется, чтоfrozenset на самом деле медленнее в отношении производительности поиска, как в CPython, так и в PyPy. У кого-нибудь есть идея, почему это так? Я не смотрел в реализации.

Ответы на вопрос(0)

Ваш ответ на вопрос