我正在学习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
的理解速度最快,因为它没有set
和list
的开销。 hash
的计算和set
中的重复删除,或list
中元素的顺序保留。
但是我不明白set comprehension
和list comprehension
花费的时间几乎相等。我想知道为什么set comprehension
并不比list comprehension
中的set
慢很多,编译器具有计算每个条目的hash value
的开销,并且不必list comprehension
时检查是否有重复。
提前感谢您的宝贵时间。