временная сложность понимания множества против понимания кортежа против понимания списка - PullRequest
0 голосов
/ 09 ноября 2018

Я изучаю Python и проверял модуль timeit. Я пытаюсь сделать то же самое с list, set и tuple, чтобы проверить накладные расходы. Пожалуйста, обратите внимание (оболочка IPython): -

>>> timeit {x**9 for x in range(100)}
>>> 49.3 µs ± 229 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

>>> timeit (x**9 for x in range(100))
>>> 830 ns ± 6.39 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

>>> timeit [x**9 for x in range(100)]
>>> 45.8 µs ± 346 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

Я понимаю, что tuple понимание является самым быстрым, потому что оно не имеет никаких издержек set и list, например. hash расчет и удаление дубликатов в set или сохранение порядка элементов в list.

Но я не понимаю, что set comprehension и list comprehension занимают почти эквивалентное время. Я хочу знать, почему set comprehension не намного медленнее, чем list comprehension, как в set, компилятору приходится загружать hash value каждой записи и проверять наличие дубликатов, тогда как list comprehension don не должен.

Заранее спасибо за ваше время.

...