Но при этом OrderedDict никуда не делся. Это сделано для совместимости?
Нет, между
dict и OrderedDict всё ещё большая разница.▫️ При сравнении в обычном
dict проверяется только наличие ключа, а в OrderedDict проверяется их порядок▫️
OrderedDict основан на связном списке и имеет метод move_to_end() для изменения порядка элементов.А метод
popitem() позволяет удалять элемент как с конца так и из начала.▫️
OrderedDict это кастомный класс. Он не так оптимизирован как обычный dict. Работает дольше, места занимает больше. В версии 3.7 он был переписан на С и стал быстрей, но всё еще уступает обычному dict.
Немного тестов:
Память: в 2.5-3 раза больше
Создание: в ~2 раза дольше
Удаление: в ~3 раза быстрей (
popitem против del)Поиск по ключу: примерно одинаково (хеш таблицы)
Код тестов↗️
Если вы используете OrderedDict, то это предполагает, что порядок ключей важен для логики программы.
#libs