Может быть, это из-за неточностей в вашем измерении времени. Вы можете использовать timeit
для таких действий:
import timeit
dic = {str(i): i for i in range(10 ** 6)}
# 27.5125/29.0836/26.8525
timeit.timeit("x = list(dic.keys())[0:30]", number=1000, globals={"dic": dic})
# 28.6648/26.4684/30.9534
timeit.timeit("y = list(dic.keys());x=y[0:30]", number=1000)
# 31.7345/29.5301/30.7541
timeit.timeit("z=dic.keys();y=list(z);x=y[0:30]", number=1000, globals={'dic': dic})
В комментариях показано, сколько раз я выполнял один и тот же код 3 раза. Как видите, даже выполняя большое количество повторений, можно получить довольно большие отклонения во времени. Это может быть связано с несколькими причинами:
- Элемент может быть в кеше вашего процессора или нет.
- Ваш процессор может быть занят другими делами.
- Et c ...
Как заявил @Andrej Kesely, ваше узкое место связано с тем, что вы помещаете ключи словаря в список. Таким образом, Python перебирает все ключи словаря, потому что именно так он обычно конвертирует что-то в list
. Следовательно, избегая этого, вы можете получить гораздо лучшие результаты.