Я столкнулся с (не очень необычной) ситуацией, в которой мне пришлось либо использовать выражение map()
, либо выражение для определения списка. И затем я подумал, какой из них быстрее.
Это ответ StackOverflow предоставил мне решение, но затем я начал сам его тестировать. В основном результаты были одинаковыми, но я обнаружил неожиданное поведение при переключении на Python 3, о котором мне стало любопытно, а именно:
λ iulian-pc ~ → python --version
Python 2.7.6
λ iulian-pc ~ → python3 --version
Python 3.4.3
λ iulian-pc ~ → python -mtimeit '{}'
10000000 loops, best of 3: 0.0306 usec per loop
λ iulian-pc ~ → python3 -mtimeit '{}'
10000000 loops, best of 3: 0.105 usec per loop
λ iulian-pc ~ → python -mtimeit 'dict()'
10000000 loops, best of 3: 0.103 usec per loop
λ iulian-pc ~ → python3 -mtimeit 'dict()'
10000000 loops, best of 3: 0.165 usec per loop
У меня было предположение, что Python 3 быстрее, чем Python 2, но он оказался в нескольких сообщениях (1, 2), что это не так. Затем я подумал, что, возможно, Python 3.5 будет работать лучше в такой простой задаче, как они заявляют в своем README
:
Язык в основном такой же, но много деталей, особенно встроенные объекты, такие как словари и строки, изменились значительно, и многие устаревшие функции, наконец, были удалены.
Но нет, это еще хуже:
λ iulian-pc ~ → python3 --version
Python 3.5.0
λ iulian-pc ~ → python3 -mtimeit '{}'
10000000 loops, best of 3: 0.144 usec per loop
λ iulian-pc ~ → python3 -mtimeit 'dict()'
1000000 loops, best of 3: 0.217 usec per loop
Я пытался погрузиться в исходный код Python 3.5 для dict
, но моего знания языка C недостаточно, чтобы найти ответ сам (или, может быть, я даже не ищу в нужном месте).
Итак, мой вопрос:
Что делает более позднюю версию Python более медленной по сравнению с более старой версией Python на относительно простой задаче, такой как определение dict
, так как по здравому смыслу это должно быть наоборот? Я знаю, что эти различия настолько малы, что в большинстве случаев их можно пренебречь. Это было просто наблюдение, которое заставило меня любопытствовать, почему время увеличилось и не осталось по крайней мере таким же?