我正在学习 python 并正在检查timeit
模块。我正在尝试与 , 完全相同的事情list
,set
并tuple
检查所涉及的间接费用。请看一下(IPython shell):-
>>> 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
理解是最快的,因为它没有 and 的任何开销set
,list
例如。hash
中的元素的计算和重复删除set
或顺序保留list
。
但我不明白的是set comprehension
和list comprehension
花费几乎相同的时间。我想知道为什么aset comprehension
并不比list comprehension
a慢很多set
,编译器有计算hash value
每个条目的开销并检查重复项,而list comprehension
不必这样做。
在此先感谢您的时间。