在SO中有幾個Python垃圾回收的線程,在閱讀了大約五篇文章以及一些文檔之後,我仍然不確定垃圾回收是如何工作的以及如何管理我沒有使用的對象。事實上,我讀過的某個人不應該做任何關於收集垃圾的事情,其他人告訴我應該有一個對象,而另外一些人則解釋說,去引用一個對象足以讓Python將其收集爲垃圾。如何將對象提供給python垃圾回收?
因此,冒着造成重複的風險,我會再次提出這個問題,但不同的是,希望得到更全面和更清晰的信息。
在我的情況下,我想用代表人物的對象進行小型模擬。將創建Person()
類的幾個實例。它應該存在一段時間,直到它實際上「死亡」而其他實例將被創建。
現在我該如何讓這個Person()
實例「死亡」(假設許多這些實例將被創建,並且我不希望這些實例像幽靈一樣掛出)?
有幾種方式我可以參考的對象:
john = Person('john')
或
people = []
people.append(Person('john'))
或
people = {}
people['john'] = Person('john')
是什麼讓我的程序清潔,釋放資源的最佳途徑最佳?那麼引用我的對象的最佳方式是什麼,以便我可以控制對象的刪除?
檢查gc模塊:http://docs.python.org/library/gc.html – rubik 2011-06-11 10:18:30
簡短的回答是:您沒有。當你不再使用(有一個參考)時,它會自動使用它。或者也許以後或從未。 GC不是確定性的,唯一的保證是,如果有垃圾可以重用,則不會耗盡內存(除了某些情況下使用保守的GC,但是Python和其他內存管理語言都不需要使用這些;只有使用指針算術的語言或指針以整數等方式轉義的方式需要這些)。除非你明白這一點,爲什麼你通常不需要擔心,那麼你應該放棄這一點。 – delnan 2011-06-11 10:59:06
這個問題同樣適用於ruby,Smalltalk,Java,C#或VB6以及其他許多應用程序。 – quamrana 2011-06-11 11:09:36