我希望 Roach 类在达到一定程度的“饥饿”时“死亡”,但我不知道如何删除该实例。我的术语可能有误,但我的意思是我的窗户上有很多“蟑螂”,我希望特定的“蟑螂”完全消失。
我会向您展示代码,但它很长。我将 Roach 类附加到 Mastermind 类蟑螂种群列表中。
一般来说:
有几种常用的方法来减少引用(取消引用对象 -> 变量绑定):
del variable
还将删除当前上下文中的引用在删除对一个对象的所有引用之后(counter==0),它成为垃圾收集的好候选,但不能保证它会被处理(参考这里):
CPython 目前使用引用计数方案,对循环链接的垃圾进行(可选)延迟检测,一旦它们变得无法访问,它就会收集大多数对象,但不能保证收集包含循环引用的垃圾。有关控制循环垃圾收集的信息,请参阅 gc 模块的文档。其他实现的行为不同,CPython 可能会改变。当对象变得无法访问时,不要依赖于立即完成对象(例如:始终关闭文件)。
对象上存在多少引用,使用sys.getrefcount
用于配置/检查垃圾收集的模块是gc
GC 销毁对象时会调用object.__ del__方法(此处附加参考)
一些不可变对象(如字符串)以特殊方式处理 - 例如,如果两个 var 包含相同的字符串,它们可能引用同一个对象,但有些不是 - 检查标识对象,为什么从 id(...) 返回值改变?
可以使用内置函数 id 找到对象的id
module memory_profiler看起来很有趣 -用于监控 python 程序的内存使用的模块
该主题有很多有用的资源,例如:Find all references to an object in python
您不能强制删除 Python 对象;当没有任何引用它时(或者当它在一个循环中仅被称为循环中的项目)时,它将被删除。你将不得不告诉你的“策划者”删除它的引用。
del somemastermind.roaches[n]
for i,roach in enumerate(roachpopulation_list)
if roach.hunger == 100
del roachpopulation_list[i]
break
通过从人口列表中删除实例(包含所有 roach 实例。
如果您的 Roache 是在 Pygame 中创建的 Sprite,那么 .kill 的简单命令将删除该实例。