Структура данных Python накладные расходы / производительность - PullRequest
3 голосов
/ 21 ноября 2008

Есть ли какое-либо преимущество в производительности при использовании списков над словарями над кортежами в Python?

Если я оптимизирую по скорости, есть ли причина отдавать предпочтение одному другому?

Ответы [ 4 ]

19 голосов
/ 21 ноября 2008

Рич,

Списки и диктанты - звери, подходящие для разных нужд. Убедитесь, что вы не используете списки для линейного поиска, где хеш-значения dicts идеальны, потому что это намного медленнее. Кроме того, если вам просто нужен список элементов для обхода, не используйте dicts, потому что он займет гораздо больше места, чем списки.

Это может показаться очевидным, но выбор правильных структур данных с помощью алгоритма дает гораздо больший выигрыш в производительности, чем микрооптимизация, благодаря более эффективной компоновке скомпилированного кода и т. Д. Если вы выполняете поиск в списке в O (n), а не в dict в O (1) микрооптимизации не спасут вас.

6 голосов
/ 21 ноября 2008

Кортежи будут немного быстрее создавать для небольшого количества элементов. Хотя на самом деле большая часть выигрыша будет использоваться в памяти, а не в циклах ЦП, поскольку для кортежей требуется меньше места, чем для списков.

С учетом вышесказанного разница в производительности должна быть незначительной, и в целом вам не следует беспокоиться об этих видах микрооптимизации, пока вы не профилируете свой код и не определите участок кода, который является узким местом.

2 голосов
/ 21 ноября 2008

Большая разница в том, что кортежи неизменны, а списки и словари - это изменяемые структуры данных. Это означает, что кортежи также быстрее, поэтому, если у вас есть коллекция элементов, которые не меняются, вы должны предпочесть их спискам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...