Коллекции в Python кажутся простыми в использовании, но под капотом скрываются сложные алгоритмы и оптимизации. Разберем, как работают списки, множества и словари на уровне памяти и вычислений. Список в Python — это динамический массив указателей на объекты. Он хранит элементы в непрерывной области памяти, что обеспечивает быстрый доступ по индексу (O(1)). - При создании списка выделяется память с запасом (over-allocation), чтобы минимизировать переаллокации при добавлении элементов. - Рост массива: При заполнении текущего буфера Python увеличивает его размер по формуле: new_size = (current_size >> 3) + (current_size < 9 ? 3 : 6) + current_size Например, для списка из 10 элементов новый размер будет 10 + 1 + 6 = 17. import sys lst = [] prev_size = 0 for _ in range(20): ....curr_size = sys.getsizeof(lst) ....if curr_size != prev_size: ........print(f"Элементов: {len(lst)}, Выделено байт: {curr_size}") ........prev_size = curr_size lst.append(None) Вывод: Элементов: 0, Выделено байт: 56
Внутренняя реализация коллекций в Python: списки, множества, словари
22 марта 202522 мар 2025
7
3 мин