Где я могу найти сложность времени и пространства встроенных типов последовательностей в Python

Мне не удалось найти источник этой информации, не просматривая сам исходный код Python, чтобы определить, как работают объекты. Кто-нибудь знает, где я могу найти это онлайн?

Ответ 1

Оформить страницу TimeComplexity на странице py dot org wiki. Он охватывает набор /dicts/lists/etc, по крайней мере, по мере того, как сложность времени идет.

Ответ 2

Раймонд Д. Хеттингер делает отличный разговор (слайды) о встроенных коллекциях Python под названием "Контейнеры Core Python - под капотом". Версия, которую я видел, фокусировалась главным образом на set и dict, но list тоже была покрыта.

Есть также некоторые фотографии соответствующих слайдов из EuroPython в блоге.

Вот краткое изложение моих заметок о list:

  • Сохраняет элементы как массив указателей. Стоимость подписки O (1). Прибавьте затраты к амортизации O (1) времени. Ввести затраты O (n).
  • Пытается избегать memcpy при росте путем чрезмерного распределения. Многие небольшие списки будут тратить много места, но большие списки никогда не теряют больше, чем около 12,5% от общего назначения.
  • Некоторые операции предварительной настройки. Приведенными примерами были range(n), map(), list(), [None] * n и нарезка.
  • При сжатии массив realloc ed только тогда, когда он тратит 50% пространства. pop дешево.

Ответ 3

Если вы спросите, что я думаю о вашем запросе, вы можете найти их Здесь... стр. 476 и далее.

Это написано вокруг методов оптимизации для Python; Это, в основном, Big-O нотация эффективности времени не так много.