我希望Roach类在达到一定的“饥饿”程度时可以“死亡”,但我不知道如何删除该实例。 我可能在使用术语方面犯了错误,但我的意思是我有很多“蟑螂”在窗户上,我希望特定的蟑螂完全消失。我不能展示代码,因为它非常长。 我将Roach类附加到Mastermind类的蟑螂种群列表中。
总体而言:
有几种通常的方法来减少引用(解除对象 -> 变量绑定):
del variable
也会删除当前上下文中的引用当一个对象的所有引用都被删除后(counter == 0),它成为垃圾收集的良好候选对象,但不能保证它会被处理 (参考资料在此):
CPython目前使用引用计数方案与(可选的)延迟检测循环链接垃圾收集,它会在大多数对象变得不可达时立即收集它们,但不能保证收集包含循环引用的垃圾。请参阅gc模块的文档以获取有关控制循环垃圾收集的信息。其他实现行为不同,CPython可能会更改。不要依赖于对象在不可达时的立即终止(例如:始终关闭文件)。
有多少对象上的引用存在,请使用sys.getrefcount
配置/检查垃圾收集的模块是gc
当销毁对象时,GC将调用object.__ del__方法(额外参考在此)
一些不可变对象(如字符串)的处理方式与众不同 - 例如,如果两个变量包含相同的字符串,它们可能引用同一个对象,但有些不是 - 请参阅识别对象,为什么id(...)返回值会改变?
对象的id可以通过内置函数id找到
模块memory_profiler看起来很有趣 - 用于监视Python程序的内存使用情况的模块
有许多有用的资源可供学习,例如:在Python中查找对象的所有引用
您无法强制删除Python对象;只有在没有引用它的情况下(或者仅在循环中被循环中的项引用时)才会被删除。您需要告诉您的"Mastermind"来擦除它的引用。
del somemastermind.roaches[n]
for i,roach in enumerate(roachpopulation_list)
if roach.hunger == 100
del roachpopulation_list[i]
break
roachpopulation_list.remove(roach)
,然后再使用 del roach
?在我看来,这两种方法应该是等价的,但我不确定。 - Jo Mo
del <instance>
”,可以尝试将其翻译成“删除 <实例>”或者“移除 <实例>”。 - TerryA