Я изучаю 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 не должен.
Заранее спасибо за ваше время.