Мне не удалось найти источник этой информации, не просматривая сам исходный код 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 нотация эффективности времени не так много.