36

我希望 Roach 类在达到一定程度的“饥饿”时“死亡”,但我不知道如何删除该实例。我的术语可能有误,但我的意思是我的窗户上有很多“蟑螂”,我希望特定的“蟑螂”完全消失。

我会向您展示代码,但它很长。我将 Roach 类附加到 Mastermind 类蟑螂种群列表中。

4

3 回答 3

25

一般来说:

  • 每个绑定变量 -> 对象都会增加内部对象的引用计数器
  • 有几种常用的方法来减少引用(取消引用对象 -> 变量绑定):

    1. 声明变量的退出代码块(第一次使用)
    2. 破坏对象将释放所有属性/方法变量的引用 -> 对象引用
    3. 调用del variable还将删除当前上下文中的引用
  • 在删除对一个对象的所有引用之后(counter==0),它成为垃圾收集的好候选,但不能保证它会被处理(参考这里):

CPython 目前使用引用计数方案,对循环链接的垃圾进行(可选)延迟检测,一旦它们变得无法访问,它就会收集大多数对象,但不能保证收集包含循环引用的垃圾。有关控制循环垃圾收集的信息,请参阅 gc 模块的文档。其他实现的行为不同,CPython 可能会改变。当对象变得无法访问时,不要依赖于立即完成对象(例如:始终关闭文件)。

于 2013-05-22T09:03:34.480 回答
12

您不能强制删除 Python 对象;当没有任何引用它时(或者当它在一个循环中仅被称为循环中的项目)时,它将被删除。你将不得不告诉你的“策划者”删除它的引用。

del somemastermind.roaches[n]
于 2013-05-22T08:20:35.143 回答
1
for i,roach in enumerate(roachpopulation_list)
        if roach.hunger == 100
            del roachpopulation_list[i]
            break

通过从人口列表中删除实例(包含所有 roach 实例。

如果您的 Roache 是在 Pygame 中创建的 Sprite,那么 .kill 的简单命令将删除该实例。

于 2018-01-31T19:18:34.043 回答