2013-02-15 2 views
0

Немного на this question. Удаление объекта из списка Python достаточно просто, но у меня будет «занятый» список - частое удаление и частые добавления - поэтому я хочу защитить от утечек памяти.Удалить и уничтожить объект в списке

  1. Удаляется ли объект из списка, уничтожая объект? (Я принимаю Нет)

  2. Если мое предположение верно, то как его удалить из списка и уничтожить его одновременно?

Если это имеет значение, объекты, о которых идет речь, являются экземплярами класса, который я написал. Я планирую создавать объекты «вживую» каждый раз, когда мне нужно вставить новый, например.

myList.insert(index,myClass(constructorParm1,constructorParm2)) 

Так что, когда я позже нужно удалить некоторые из экземпляров, созданных таким образом, я хочу быть уверен, что они не просто ушли из списка, но пошел период.

+3

Если ссылок на объект больше нет (в cPython, по крайней мере), он будет уничтожен. – geoffspear

+0

Я использую Python 2.7.x. Если он делает то же самое, то отлично. – JDM

+1

@JDM: Python 2.7 - это версия cPython. Он делает именно это. –

ответ

3

В CPython, объекты автоматически уничтожены, когда их количество ссылок падает до 0.

Если удалить запись из списка, счетчик ссылок для данного объекта уменьшается. Вам не нужно делать ничего особенного, чтобы уничтожить его, и вы не должны пытаться. Если какая-либо другая ссылка на объект все еще существует, то уничтожение объекта приведет к поломке другой ссылки.

Если вы хотите сохранить ссылки на объект, который делает не, остановите объект от сбора мусора, используйте вместо него ссылку weakref.

+0

Я использую Python 2.7. Он делает то же самое? Если так, то здорово, не проблема. – JDM

+1

Python 2.7 - это версия cPython, так что да. Мы указываем, что это cPython, в отличие от Jython, IronPython или PyPy, которые по-разному обрабатывают жизни объектов. –

+0

"auto-roaped"? Это странный способ написания - «сборщик мусора»? ;) –

Смежные вопросы