Выполнение аналогичных операций в Python, как в C ++, часто может быть медленнее. list
и dict
на самом деле реализованы очень хорошо, но вы получаете много накладных расходов, используя объекты Python, которые являются более абстрактными, чем объекты C ++, и требуют гораздо большего поиска во время выполнения.
Кстати, std::vector
реализован очень похоже на list
. std::map
, однако, фактически реализован таким образом, что многие операции выполняются медленнее, чем dict
, так как его размер становится большим. Для достаточно больших примеров каждого из них dict
преодолевает постоянный коэффициент, на который он медленнее, чем std::map
, и фактически выполняет такие операции, как поиск, вставка и т. Д.
Если вы хотите использовать std::map
и std::vector
, вас ничто не остановит. Вам придется обернуть их самостоятельно, если вы хотите выставить их на Python. Не будьте шокированы, если эта упаковка занимает все или большую часть времени, которое вы надеялись сэкономить. Мне не известны какие-либо инструменты, которые делают это автоматически для вас.
Существуют вызовы C API для управления созданием объектов с некоторыми подробностями. Вы можете сказать «Создайте список по крайней мере с таким количеством элементов», но это не улучшит общую сложность вашей операции создания и заполнения списка. Конечно, это не сильно изменится позже, когда вы попытаетесь изменить свой список.
Мой общий совет:
Если вам нужен массив фиксированного размера (вы говорите об указании размера списка), вы, возможно, захотите что-то вроде пустого массива.
Я сомневаюсь, что вы получите какое-либо ускорение от использования std::vector
сверх list
для общей замены в вашем коде. Если вы хотите использовать его за кулисами, это может дать вам удовлетворительное улучшение размера и пространства (я, конечно, не знаю без измерений, как и вы;)).
dict
на самом деле делает свою работу очень хорошо. Я определенно не стал бы пытаться ввести новый тип общего назначения для использования в Python, основанный на std::map
, который имеет худшую алгоритмическую сложность во времени для многих важных операций и - по крайней мере в некоторых реализациях - оставляет пользователю некоторые оптимизации, которые dict
уже есть.
Если бы я хотел что-то, что работало бы немного больше, например std::map
, я бы, вероятно, использовал базу данных. Это обычно то, что я делаю, если вещи, которые я хочу хранить в dict
(или, если на то пошло, вещи, которые я храню в list
), становятся слишком большими для меня, чтобы чувствовать себя комфортно в памяти. Python имеет sqlite3
в stdlib и драйверы для всех остальных основных баз данных.