生命周期到期后从列表中删除对象

时间:2014-05-15 14:06:43

标签: python oop

我正在创建一个随机生成对象的程序。这些物体的寿命有限。

我创建这些对象并将它们放在一个列表中。对象跟踪它们存在的时间并最终到期。到期后不再需要它们。

我想在对象过期后将其删除,但我不确定如何引用列表中的特定对象来删除它。

if something:

    list.append(SomeObject())

----后来---

我想要一个查看Object中变量的清理过程,如果它已过期,则将其从列表中删除。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果您将“不再使用”定义为“没有其他对象保留引用”,则可以使用refCount。这是一种好方法,因为不存在引用,所以不能再访问该对象并且可以将其丢弃。事实上,Python的垃圾收集器会为你做到这一点。

出错的地方是你还有列表中的所有实例。这也算作对物体的参考,因此它永远不会被处理掉。

例如,状态变量列表,不仅由其拥有对象引用,还由列表允许线性访问。从访问器中明确调用清理函数以保持列表清洁:

GlobalStateList = []
def gcOnGlobalStateList():
  for s in reversed(GlobalStateList):
    if (getrefcount(s) <= 3): # 1=GlobalStateList, 2=Iterator, 3=getrefcount()
      GlobalStateList.remove(s)

def getGlobalStateList():
  gcOnGlobalStateList()
  return GlobalStateList   

请注意,即使查看引用计数也会增加它,因此测试值为3或更低。

答案 1 :(得分:0)

假设您的概念SomeObject&#34;到期&#34;与底层的Python对象生命周期没有直接关系(引用计数等)我建议清除列表的最简单方法是偶尔运行它,取消引用任何expired个对象:

lst = [obj for obj in lst if not obj.expired]

请注意,您不应该调用自己的变量list,因为这会影响内置变量。