Изначально я хотел сразу начать отвечать на вопрос с собеса про память в Python, но поняв, что выйдет очень длинно, решил разбить на несколько постов. Сейчас поговорим про GIL, в следующих статьях про GC, закончим уже поверхностно про пуллы памяти, арены. GIL - это просто лок, который разрешает только одному потоку удерживать контроль на интерпретатором Python'a (собсна такое определение можно было дать и из названия). Не просто так конечно выделил жирным про один поток. Да, в этом вся печаль и рофел. Никакого параллельного выполнения потоков у нас НЕТ! Когда речь идет о однопоточной программе, то вообще всё равно, но если мы работаем в нескольких потоках, то это бьёт нам по производительности. Всё это можно сравнить с ядрами нашего ЦП. Мы всегда исключительно используем одно, а другие просто наблюдают как другой напрягается. GIL нужен для решения проблемы race conditions. Сразу на примере, но придется затронуть чутка сборщик мусора. У каждого объекта (PyObject) есть Py_REFCNT где хран