2013-02-15 70 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