|
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
|
|
Удаление объекта12.05.2018, 19:34. Показов 12917. Ответов 10
Метки нет (Все метки)
Здравствуйте, господа.
Больно в гугле велики расхождения ответов на данный вопрос, потому переадресовываю его вам: можно ли как-либо удалить в питоне экземпляр объекта так, что бы все ссылки на него (которых может быть сотни из разных кусков проекта) стали None (и он сам в памяти пропал, что бы gc собрал его компоненты, на которые больше никто не ссылался)
0
|
|
| 12.05.2018, 19:34 | |
|
Ответы с готовыми решениями:
10
Удаление объекта класса в конструкторе
Произойдёт ли удаление объекта без вызова term? |
|
|
||
| 12.05.2018, 21:45 | ||
|
Существует два способа это сделать: просто предположить и использовать специальную функцию для подсчета. Почему вы думаете что их нужно удалить? Если объект никем не используется и его счетчик ссылок достиг нуля - будет произведено удаление по decref. Если на объект существует циклическая ссылка и на него нет внешних ссылок (только внутренние) - gc разрулит это сам с помощью cycle finder. В крайнем случае объект уйдет в garbage контейнер. Если объект используется, а вы все-таки хотите его удалить - вы хотите странного. Инструменты очистки памяти для тяжелых случаев плохо написанного кода: 1) gc.collect() 2) слабые ссылки (weakref) 3) увеличение порогового значения (sys.set_threshold) для объектов нулевого поколения: чтобы gc срабатывал чаще.
0
|
||
|
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
|
|
| 13.05.2018, 11:17 [ТС] | |
|
у меня крупный проект, а именно: 3д движок по мотивам юнити (похожая структура), следовательно, допустим, имеется объект в мировом пространстве, а на него есть десяток ссылок из каких-либо скриптов в других объектах, а так же одна ссылка как минимум из списка объектов мира, так вот в одном из скриптов мне нужно его удалить, при том удалить так, что бы удалилась не ссылка из того скрипта на него, а сам объект пропал и ВСЕ ссылки на него у всех стали None
Мультипроцессорности у меня нет, так что в процессе удаления объект не может использоваться
0
|
|
|
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
|
||||||
| 13.05.2018, 11:57 | ||||||
|
Питон так устроен, что вы не можете удалить непосредственно объект, или обнулить счетчик ссылок на него (исключая, возможно, один очень нехороший способ). Если счетчик ссылок не равен нулю, значит объект используется, и его неожиданное исчезновение повлечет за собой неприятные последствия вроде проброса (произвольного) исключения.
Можно попытаться подменить объект мягкоссылочной проксей - weakref.proxy / weakref.ref, однако, есть неудобные побочные эффекты, вроде необходимости писательства скобок всюду, где используется ref, или проброса исключения ReferenceError, если объект на который ссылается proxy больше не существует. пример weakref
Или Вы, возможно, что-то иное подразумевете под ссылками, и мы вас не понимаем?..
0
|
||||||
|
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
|
|
| 13.05.2018, 12:01 [ТС] | |
|
Что такое ссылка я вполне понимаю и ничего уникального не подразумеваю
Что ж, всё таки оказались верны те ответы гугла, которые говорили, что так сделать в питоне невозможно.. печально, значит будет ненадёжное удаление.. а про weakref'ы почитаю для профилактики, просто не вариант переписывать мой проект под подобную структуру, когда завтра дедлайн)
0
|
|
|
|
||
| 13.05.2018, 12:42 | ||
|
Python не СИ - он все делает за ВАС в плане управления памятью. Если объект в какой-то момент выполнения кода вам становится не нужным - вы просто делаете del объект и все: привязка объекта к имени переменной удаляется из данного namespace, а счетчик ссылок на объект уменьшается на единицу, при нулевом числе ссылок память занимаемая объектом автоматически деаллоцируется.
0
|
||
|
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
|
|
| 13.05.2018, 14:23 [ТС] | |
|
Да эти вещи я и так понимаю, я искал способ обойти механику питона и именно удалить объект, т.е. что бы все ссылки на него занулились
0
|
|
|
|
|
| 13.05.2018, 14:35 | |
|
Механику Python не нужно обходить - нужно просто писать python way код и делать грамотную архитектуру проекта.
Все остальное python сделает за вас. Для удаления объектов (с удалением привязки к имени) существует единственный нормальный способ: del obj. То что хотите вы - даже в СИ не делается, поскольку ручное управление подразумевает немедленную деаллокацию ненужной переменной самим программистом в том месте, где она была определена.
0
|
|
|
1 / 0 / 1
Регистрация: 23.05.2022
Сообщений: 2
|
||||||
| 23.05.2022, 16:13 | ||||||
Сообщение было отмечено Notrum666 как решение
Решение
То, что в python нельзя гарантировано удалить экземпляр объекта вручную мне кажется не совсем правда. Да, сборщик мусора будет тупить пока существуют ссылки на экземпляр объекта, но кто сказал, что нельзя занулить сам экземпляр и тогда ссылки на него исчезнут.
Пример рабочего кода:
Profit, please!
0
|
||||||
|
1 / 0 / 1
Регистрация: 23.05.2022
Сообщений: 2
|
|
| 23.05.2022, 16:38 | |
|
Вот результат работы кода
0
|
|
|
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
|
|
| 23.05.2022, 22:26 [ТС] | |
|
удивительно, теме 4 года, а на неё ещё отвечают..
я уже 4 года с питоном не работаю, так что не особо вникаю что тут происходит, но пусть будет ответом, наверн
0
|
|
| 23.05.2022, 22:26 | |
|
Помогаю со студенческими работами здесь
11
Удаление объектов из списка и удаление самого объекта Удаление объекта Удаление объекта Удаление объекта ef 6.0
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|