从列表中删除未引用的对象

时间:2012-03-27 20:06:38

标签: python list pygame

修改:已解决。感谢帮助人员,但似乎问题是列表被覆盖并转换为精灵组,使所有列表操作无效。

我最近开始在python中编程(总是引发警钟),所以如果我编写的东西的方式有些可怕,我道歉。此特定程序导入 pygame (正在使用的'引擎')。

我正在尝试创建一个包含对象/精灵的列表。我似乎已经实现了这一点,但是,一旦不再需要该对象,我就有一个问题,因为对象没有特定的指针,据我所知。

精灵类的构造如下:

class Point(pygame.sprite.Sprite):
    def __init__(self,pos=(0,0)):
        pygame.sprite.Sprite.__init__(self)

        #Unimportant code

        self.dead=False
        print self
        #This prints; "<Point sprite(in 0 groups)>"

    def update(self):
        if(self.dead):
            #sprList_PointSet.remove(?)
            pass

创建对象和列表;

sprList_PointSet=[]
sprList_PointSet+=[Point((50,90))]
sprList_PointSet+=[Point((65,110))]
# ...

print sprList_PointSet
#This prints; [<Point sprite(in 0 groups)>, <Point sprite(in 0 groups)>, ...]

在没有明显内存指示符的情况下,有没有办法在不再需要时使用.remove(x)从列表中删除实例?如果不是/或/并且有人可以推荐更好的方法。

2 个答案:

答案 0 :(得分:2)

self指向您要删除的对象,因此只需remove(self)

def update(self):
    if self.dead:
        try:
            sprList_PointSet.remove(self)
        except ValueError:
            pass

remove是为mutable sequences定义的,描述为in the tutorial

  

从列表中删除值为x的第一项。如果没有这样的项目,则会出错。

答案 1 :(得分:2)

当没有“重要”的东西需要时,你可以使用weak references让实例消失。