2013-02-15 69 views
0

this question上扩展一点。从Python列表中移除一个对象非常简单,但我将拥有一个“繁忙”列表 - 频繁移除和频繁添加 - 所以我想防范内存泄漏。删除并销毁列表中的对象

  1. 从列表中删除对象是否会破坏对象? (我假设没有)

  2. 如果我的假设是正确的,那我该如何从列表中删除它同时销毁它呢?

如果重要,那么所讨论的对象就是我写的类的实例。我计划在每次需要插入一个新的对象时创建对象“实况”,例如,

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

所以,当我以后需要删除一些创建这样的情况下,我要确保他们不只是从列表中消失了,但走了一段。

+3

如果没有更多的对象引用(至少在cPython中),它将被销毁。 – geoffspear 2013-02-15 15:18:25

+0

我正在使用Python 2.7.x.如果它一样,那么很好。 – JDM 2013-02-15 15:21:15

+1

@JDM:Python 2.7是一个cPython版本。它就是这样。 – 2013-02-15 15:21:48

回答

3

在CPython中,对象是自动破坏时,他们的引用计数如果从列表中删除一个条目降到0

,对所讨论的对象的引用计数递减。你不需要做任何特别的事情就可以销毁它,也不应该尝试。如果对该对象的任何其他引用仍然存在,则销毁该对象将会破坏另一个引用。

如果要保留对某个对象的引用,而不是而不是请停止该对象被垃圾回收,请改为使用weakref引用。

+0

我正在使用Python 2.7。它是否也这样做?如果是这样,那么很好,没问题。 – JDM 2013-02-15 15:22:29

+1

Python 2.7是一个cPython版本,所以是的。我们将这个指定为一个cPython,而不是Jython,IronPython或PyPy,它们以不同方式处理对象生命周期。 – 2013-02-15 15:23:11

+0

“自动收割”?这是一种奇怪的拼写方式 - “垃圾收集”? ;) – 2013-02-15 15:23:19