Найти тему
39. Опишите принцип работы сборщика мусора в Python В Python имеется встроенный механизм управления памятью, реализующий сборщик мусора (garbage collector ). Сборщик мусора периодически запускается и подсчитывает ссылки на объекты. Если ссылок нет, память можно освобождать. Это просто и эффективно, но есть один недостаток - определеление циклических ссылок. Для этого существует дополнительный сборщик, generational garbage collection, который следит за объектами с циклическими ссылками. В Python встроен модуль gc, благодаря которому можно осуществить управление или слежение за сборкой мусора. (https://docs.python.org/3/library/gc.html) Дополнительно упомяну каверзный вопрос: что делать, чтобы избежать циклических ссылок в своём коде? Правильный ответ - писать нормальный код. Ожидаемый ответ - использовать модуль weakref (https://docs.python.org/3/library/weakref.html#module-weakref) p.s. Количество ссылок на ваш объект можно узнать так: import sys sys.getrefcount(some_object) #сериал101, #39
1 год назад
38. Как сделать копию объекта? Как сделать глубокую копию объекта? Типа копий бывает два: обычная-неглубокая (shallow) и глубокая (deep). Разница между мелким и глубоким копированием актуальна только для составных объектов (объектов, содержащих другие объекты, такие как списки или экземпляры классов).: - Неглубокая копия создает новый составной объект, а затем (насколько это возможно) вставляет в него ссылки на объекты, найденные в оригинале. - Глубокая копия создает новый составной объект, а затем рекурсивно вставляет в него копии объектов, найденных в оригинале. Ответ: from copy import copy, deepcopy a = [1,2,3,4,5,6] my_copy = copy(a) my_deep_copy = deepcopy(a) >>> id(a) 140384823640320 >>> id(my_copy) 140384823640448 >>> id(my_deep_copy) 140384823572544 #сериал101, #38
1 год назад