Как сказал Свен Марнах, в Python реализовано OrderedDict
, я хочу добавить, что оно реализовано с использованием dict
и list
.
dict
в python реализован как хеш-таблица. Я не уверен, как реализован deque
, но в документации сказано, что deque
оптимизирован для быстрого добавления или доступа к первым / последним элементам, поэтому я предполагаю, что deque
реализован как связанный список.
Я думаю, что когда вы делаете pop
в OrderedDict, python выполняет поиск по хеш-таблице, который медленнее по сравнению со связанным списком, который имеет прямые указатели на последний и первый элементы. Добавление элемента в конец связанного списка также быстрее по сравнению с хеш-таблицей.
Итак, основная причина, по которой OrderDict
в вашем примере медленнее, заключается в том, что он быстрее обращается к последнему элементу из связанного списка, чем к любому элементу с использованием хэш-таблицы.
Мои мысли основаны на информации из книги Beautiful Code, она описывает детали реализации за dict
, однако я не знаю подробностей за list
и deque
, этот ответ - просто моя интуиция о том, как все работает, так что в случае, если я ошибаюсь, я действительно заслуживаю отрицательных голосов за разговоры, в которых я не уверен. Почему я говорю вещи, в которых я не уверен? -Потому что я хочу проверить свою интуицию:)