Сборка мусора (garbage collection) в Python
HTML-код
- Опубликовано: 2 июн 2024
- Сборка мусора это важная часть любого языка с автоматическим управлением памяти, и в python она очень типичная. Разобравшись с Python, вы будете иметь хорошее представление о том, как такие алгоритмы вообще работают, и как их можно модифицировать.
Группа в тг, где я даю дополнительный контекст для моих видео и несмешно шучу - t.me/PythonClinicChnl
Таймкоды:
00:00 - интро
00:30 - подсчёт ссылок
06:01 - конец?
06:15 - циклические ссылки
12:35 - доп инфраструктура объектов
14:59 - "относительно простой пример"
22:46 - первая фаза сборки
26:29 - вторая фаза сборки
31:11 - автоматизация и поколения
39:35 - как повлиять на процесс сборки
42:30 - конец
обычно если видео идет 42 минуты, по ощущениям оно идет 42 минуты, здесь было ощущение, что прошло всего 5 минут. Очень интересно объяснено, спасибо.
это прямо лучший комплимент, спасибо
Классно объяснил всё, спасибо!
Спасибо!
Кайфанул от названия канала!)))
🐆
Чел, ты лучший 👍
Хм, если модуль ссылается на все объекты то как эти объекты очищаются, ведь даже link_4 должен будет иметь внешнею ссылку?
ссылка модуля по-умолчанию циклическая, поэтому её "разрушает" сборщик
А как всё-таки на уровне C удаляются объекты, у которых ref_count=0? Для этого ведь тоже некий алгоритм должен быть. С из коробки ведь не удаляет объекты динамически.
Как я предполагаю это умный указатель, который при вызове метода уменьшения количества ссылок проверяет, не равны ли они нулю. И если равны, вызывает деструктор.
да-да, там просто вызов деструктора, вообще в рамках архитектуры CPython считается, что все ссылки контролируются, и можно дополнительно не проверять, если реф каунт 0, то можно уничтожать
@@MrLotrusтам скорее всего обычный указатель, сырой, и работа идёт на уровне malloc free…
Что такое ссылка в питоне? Это сишный указатель?..
на самом низком уровне - да, ссылка сводится к указателю
З нетерпінням чекаю інфи по threading, multiprocessing, asyncio! GL!
у аўторак будзе пачатак серыі аб паралельным праграмаванні)
@@pythonclinic друг, это был украинский :)
Енивей, спасибо большое)))
хахаха, я знаю, но я-то белорус) мы можем общаться на своих языках)
@@pythonclinic за то что ты бяларус - отдельное уважение)
1. Что-то я не совсем догоняю, почему когда вы создаете экземпляры класса Link, не присваиваете обязательные атрибуты next (в частности link_3 и link_4). Вы делаете это после "создания" объекта экземпляра класса (по сути он и не должен будет создаваться из-за ошибки). Либо вы этим пренебрегли в учебных целях, либо вы забыли написать default значение next в методе __init__?
2. А что именно удаляет объекты из кучи, когда их счетчик ссылок равен нулю? Раньше я думал этим как раз таки занимается сборщик мусора, но теперь понял, что garbage collector лишь взаимодействует с объектами, у которых возможны циклические ссылки.
3. А как питон понимает, что на объект больше НЕ БУДЕТ ссылаться ни одна переменная? Вот он построчно проходит интерпретацию, видит, что на объект в моменте нет ссылок, соответственно уничтожает объект. Но тут вдруг в будущем появляется снова этот объект. Он создаст новый объект или есть какой-то хитрый механизм, что питон знает, что этот объект будет использоваться в будущем? Либо я что-то упустил в алгоритме интерпретации, возможно там виртуальная машина питона с байт кодом что-то чудит :)
1. my bad, там просто не видно за границей экрана, что у параметра next есть значение по-умолчанию None
2. вообще сборщик мусора тригерит деструктор у удаляемого объекта, и потом "забирает" оставшуюся память, тут как посмотреть, можно сказать и что gc удаляет объекты, и что они сами себя удаляют)
3. ну да, будущее питон не знает, потэтому просто удаляет объекты сразу же, как только на них нету ссылок, если потом появится тапкой же объект - он будет создан заново (есть несколько всяких трюков типа интернации строк, которые помогают экономить память в таких ситуациях тоже, а вообще компилируемые языки обычно умеют такие ситуации "предвидеть", но достаточно ограничено, насколько хватит глубины анализа кода)
Дякую за контент! Чекаю більше корисної інфи!
все буде))