TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.3K subscribers
Post #7488 3.4K
🏗 Что под капотом у Python List

Многие думают, что list — это связный список. На самом деле это динамический массив указателей.

1. Как он хранится в памяти

В структуре PyListObject на языке C список состоит из трех ключевых полей:

— ob_item — указатель на массив, где лежат адреса объектов.
— ob_size — текущее количество элементов (то, что выдает `len()`).
— allocated — сколько ячеек памяти зарезервировано на самом деле.

2. Магия Append и «переезд» памяти

Python не выделяет память под каждый новый элемент. Он делает это «на вырост» (over-allocation). Если вы создаете пустой список и делаете append, Python выделит сразу 4 ячейки. Когда они закончатся — 8, потом 16, 24 и так далее.

Почему append быстрый? В 99% случаев вы просто записываете адрес в уже готовую ячейку ().
Что такое Resize? Когда лимит (`allocated`) исчерпан, Python ищет в памяти новый кусок побольше и копирует туда все указатели. Это , но из-за редких «переездов» амортизированная сложность остается .

3. Почему в списке может лежать «всё что угодно»

Размер самого списка не зависит от того, лежат там строки или другие списки. Массив ob_item хранит только указатели (адреса в памяти), а они всегда фиксированного размера — 8 байт на 64-битной системе.

Благодаря этому Python мгновенно находит любой элемент по индексу. Адрес -го элемента вычисляется по простой формуле:

адрес = начало_массива + i * 8 байт.

📍 Навигация: Вакансии • Задачи • Собесы

🐸 Библиотека питониста

#буст
  • 👍 17
  • ❤ 5
  • 😁 2
  • 😢 1
More from @pyproglib
  1. Sep 30, 2026🔥 Последний день для разработчиков AI уже пишет код. Теперь важнее научиться встраивать е…
  2. Sep 25, 2026🔥 Курс «ИИ для разработчиков» уже стартовал И мы решили открыть первое занятие всем — мож…
  3. Sep 20, 2026👻 94% токенов уходят не на код Анализ запусков показал: основная часть токенов уходит на…
  4. Sep 19, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  5. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  6. Sep 15, 2026⏱️ Справочник по Big-O в Python Для тех, кто хочет писать не просто работающий, а эффектив…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →