Управление памятью в Python

  Рет қаралды 6,316

Python Clinic

Python Clinic

Күн бұрын

В этом видео я постараюсь максимально просто объяснить, как работает управление памятью (memory management) в Python. Ну и конечно без схем не обошлось)
Канал в тг - t.me/PythonClinicChnl
Таймкоды:
00:00 - интро
00:55 - стэк и куча
08:16 - арены
10:42 - пулы
11:26 - блоки
18:04 - выводы
19:59 - аутро

Пікірлер: 42
@MrLotrus
@MrLotrus Жыл бұрын
Вот контента такой глубины в русскоязычном Ютубе очень не хватает. Спасибо ❤
@pythonclinic
@pythonclinic Жыл бұрын
всё будет)
@user-kk9sp2ln6x
@user-kk9sp2ln6x Жыл бұрын
Формат бомба.) Информация заходит чётко. Теперь есть более глубокое представление об автоматизации работы с памятью в python. Жду видео о ссылках и объектах!)
@pythonclinic
@pythonclinic Жыл бұрын
и оно таки будет на следующей неделе) спасибо)
@heybeachMIN
@heybeachMIN 8 ай бұрын
Блин у меня "куча" ассоциируется с гером фильма ;) А вообще видео очень хорошее, стало намного понятней как работает память в python, хоть я и новичок в программировании. Спасибо!
@sergekhalimovskyy5467
@sergekhalimovskyy5467 9 ай бұрын
19:23 Это наверное самое смешное что я слышал за последние годы про утечку. Мало кто поймет..
@programming_etc
@programming_etc 8 ай бұрын
Годный видос, не смотря на то что особо никогда не заморачивался с памятью в python из-за встроенного инструментария по её организации, всё равно интеересно послушать как это всё работает под капотом. Много нового для себя узнал). Интересно было бы посмотреть видео похожего формата где бы на низком уровне объяснялись генераторы)
@cortexor1
@cortexor1 Жыл бұрын
Супер! Спасибо за качественны и понятный материал!
@eXcroll
@eXcroll Жыл бұрын
молодец, хорошее объяснение такой сложной темы👍
@TrueSentiago
@TrueSentiago 6 ай бұрын
Крутое объяснение материала! Спасибо!
@fichtensaft5149
@fichtensaft5149 7 ай бұрын
Отличное видео, посмотрел с удовольствием
@user-kb8nl1vz1i
@user-kb8nl1vz1i 4 ай бұрын
Спасибо за объяснение, вполне доходчиво
@user-ry2xj2yy7q
@user-ry2xj2yy7q 11 ай бұрын
супер просто и понятно. Ставлю лайк)
@user-sr3mr8zq7i
@user-sr3mr8zq7i 6 ай бұрын
Супер! Огромное спасибо!
@nehz_ttv
@nehz_ttv 24 күн бұрын
3 раза поспал, спасибо)
@user-zu2sy2lq6t
@user-zu2sy2lq6t Жыл бұрын
randomly found your channel, very useful
@pythonclinic
@pythonclinic Жыл бұрын
thanks!
@dmitry-lz1ny
@dmitry-lz1ny Жыл бұрын
Очень полезная информация. Такие темы чаще всего игнорятся создателями контента по питону. А как такую тему сделать на diagrams?
@pythonclinic
@pythonclinic Жыл бұрын
В опциях диаграмы включить Sketch
@evgenyzakiev693
@evgenyzakiev693 Жыл бұрын
От babushki спасибо:)))
@user-mb9ml5hn9u
@user-mb9ml5hn9u 9 ай бұрын
Привет, классный контент,но мне все еще не дают покоя эти вопросы 1)Почему в python мы не храним объекты с неизменяемым типом данных в stack,как в си ,ведь мы знаем их размер? 2)В 1 блоке может быть только 1 объект? 3)Как интерпретатор понимает какой размер объекта,есть ли для базовых неизменяемых,для изменяемых типов заданные значения(int=8б)? если изменяемый тип становиться больше блока ,я так понимаю он выносит его в блок с большем размером
@pythonclinic
@pythonclinic 9 ай бұрын
ох, интересные вопросы, попробую аккуратно ответить: 1) свечку не держал, но предположу, что такая архитектура придумана для гибкости работы со всеми объектами по ссылке, грубо говоря ко всем объектам применяются одинаковые стандарты подсчёта ссылок и отправления их в последний путь 2) в теории да, если он прям огромный 3) заданных значений нет, объекты в теории прям бесконечно большие, но есть такой момент, что изменяемые объекты меняться не могут, поэтому мы их размер один раз при создании вычисляем и на этом успокаиваемся, а изменяемые объекты это всегда наборы ссылок, которые в свою очередь могут ссылаться либо на неизменяемые (размер которых мы знаем), либо на изменяемые, которые тоже суть наборы ссылок и так до конца, пока по всем ссылкам мы не упрёмся либо в неизменяемые, либо в пустые объекты, и тогда для изменяемых объектов достаточно просто пройти по всем ссылкам и посчитать размер всего, что мы встретим на своём пути (но интерпретатор этого не делает вообще говоря, ему не нужно, потому что важно разложить в памяти именно неизменяемые объекты, и для них знать размер, а всякие списки это всего лишь оболочки пусть и со своей логикой хранения внутри, но всё равно там только ссылки в основном, их размер фиксирован и относительно мал)
@user-dk4cx9mw5g
@user-dk4cx9mw5g Жыл бұрын
Очень интересно! Спасибо! Менеджер так работает только в CPython или в других интерпретаторах тоже?
@pythonclinic
@pythonclinic Жыл бұрын
Похожие концепции используются в большинстве языков с автоматическим управлением памятью, но они все различаются в деталях, иногда очень сильно, например, в C# тоже есть стэк и куча, но в обоих будут храниться прям живые объекты, а переменные будут существовать вообще отдельно
@IPClimber
@IPClimber 3 ай бұрын
Спасибо, коллега! Хотелось задать несколько вопроса: 1. Указатель freeblock есть , а указатель untoched нет? Почему вообще их учитывают раздельно? 2. Как думаешь, почему partially full арену/пул нельзя отдать OS? Ведь память на современных системах - виртуальная, и можно просто размаппить неиспользованный кусок(предположение - маппится contiguous region , и если отмаппить его кусочек, туда всё равно ничего не влезет, те фрагментация на уровне физической памяти ) 3. Есть ли какие-то предпочтения по группировке? Например, хранить элементы массива рядом с самим массивом (который, как известно, хранит только ссылки на содержимое) Спасибо за интересную тему!
@pythonclinic
@pythonclinic 3 ай бұрын
1. есть и untouched, но он не настолько интересен, freeblock позволяет переиспользовать "арендованную" память, это чаще всего важнее, чем использовать новую, и поэтому их учитывают отдельно, экономия на всём и всегда 2. соглашусь, что в теории такая операция возможна, но на практике она была бы досточно "дорогой" для самой os + не совсем понятно, в какой именно момент отдавать кусок неиспользованной арены обратно, нужно быть прям уверенным, что оно больше не понадобится, а это возможно только если программа завершена, но в этом случае всё отдадим и так 3. нет, по умолчанию нет, потому что предпологается, что обращение по ссылке происходит за постоянное время, но в некоторых ситуациях своего рода группировка реализуется специально, например для массивов numpy, а в некоторых она возникает сама (если объекты улетают в один пул)
@IPClimber
@IPClimber 3 ай бұрын
@@pythonclinic спасибо за ответ! Насчёт константного доступа: в случае кэширования есть разница)
@sladge17
@sladge17 Жыл бұрын
Отличный ролик, здорово, что делаешь не очередной курс по основам python, а копаешь глубже. Но после просмотра появилась пара вопросов которые не раскрыты в видео: 1. Как определяется велечина блока в пуле? Насколько я знаю она определяется при первом заполнении свободного пула велечиной равной или большей велечине объекта который мы хотим положить в пул, а далее весь пул заполняется блоками равного размера. Но могу ошибаться. 2. Что происходит если велечина объекта превышает велечину пула? Что происходит если велечина объекта превышает велечину арены?
@pythonclinic
@pythonclinic Жыл бұрын
Спасибо за отличные вопросы, разбираемся: 1. Идея верная, размер блоков в пуле подстраивается под первый добавленный объект, но при этом размеры блоков заранее предопределены - 8, 16, 24, 32, 40, ... , 512 байт. Из этих размеров выбирается минимальный, в который влезет новый объект. 2. В таких случаях будет работать совершенно другой механизм выделения памяти, если объект не влезает в пул, и его нельзя разбить на части и как-то эти части связать, то pvm попытается спихнуть ответственность на операционную систему, которая конечно же справится с этой задачей, если у неё самой будет достаточно памяти "на руках". Это, очевидно, очень плохой сценарий, так как этот объект выпадает из стандартного флоу управления памятью, и приводит к дополнительной фрагментации памяти на уровне операционной системы.
@sladge17
@sladge17 Жыл бұрын
@@pythonclinic Спасибо за подробный ответ.
@annonymous8220
@annonymous8220 Жыл бұрын
мы можем как то практически применять знание о распределении памяти ? Как то положительно влиять на это, если этот процесс автоматизирован?
@pythonclinic
@pythonclinic Жыл бұрын
процесс полностью автоматический, мы можем немного на него влиять через модуль gc (сборщик мусора), а ещё мы можем сделать некоторые выводы о работе с объектами в памяти, я расскажу об этом в дополнительных видео
@andreydubrov5562
@andreydubrov5562 Жыл бұрын
Формат хороший, но экологично и экономично это все-таки разные понятия)
@pythonclinic
@pythonclinic Жыл бұрын
экологично, потому что уже выделенная память переиспользуется
@user-zb5wh1zh8d
@user-zb5wh1zh8d Жыл бұрын
Не подскажите, как сделали такую визуализацию в draw io? Не нашел в стандартных настройках =/
@pythonclinic
@pythonclinic Жыл бұрын
В настройках диаграммы нужно включить параметр sketch
@MrSunTrope
@MrSunTrope Ай бұрын
А если объект 1мб он поделится на 4 арены? как произойдёт запись?
@pythonclinic
@pythonclinic Ай бұрын
не, не поделится, большинство объектов в пайтон относятся к сложно устроенным ссылочным типам данных, части которых не будут превышать лимит и они будут хранится в разных аренах
@qrthack3233
@qrthack3233 5 ай бұрын
Можно узнать откуда черпал инфу?)
@pythonclinic
@pythonclinic 5 ай бұрын
никаких секретов, это документация и исходный код Python)
@9564519
@9564519 Жыл бұрын
утекать память будет автоматически XDDD
@kohakovich
@kohakovich 9 ай бұрын
Grazia Signore.
MEU IRMÃO FICOU FAMOSO
00:52
Matheus Kriwat
Рет қаралды 26 МЛН
Дибала против вратаря Легенды
00:33
Mr. Oleynik
Рет қаралды 2,1 МЛН
Потоки в Python
13:26
Python Clinic
Рет қаралды 1 М.
Делаем онлайн урок по математике.
15:31
Интерактивы по математике
Рет қаралды 69
Ruff в Python: Этот инструмент изменит все
10:21
Потоки ненастоящие? GIL в Python
13:20
Python Clinic
Рет қаралды 1,3 М.
Абстрактные классы в Python
12:35
Python Clinic
Рет қаралды 2,9 М.