从链表中删除结束节点时,我们只是将指向结束节点的节点的链接设置为“无”。这是否意味着终端节点被销毁并且其占用的内存已被释放?
答案 0 :(得分:3)
你问:“这是否意味着终端节点被破坏并且它占用的内存已被释放?”
根据您提出的问题答案,您提出的问题肯定是不是一个简单的不合格的“是”。
为什么“是”错误的最简单的例子是,如果对该结束节点有任何其他引用,那么它不能立即被释放 - 如果是这种情况那么没有什么可行的,是吗?但是,这并不意味着节点不会被视为可删除。
此外,即使曾经可释放,但这并不意味着内存“已被释放” - 这是依赖于实现的,可能不是确定性的,即您不一定依赖于已立即释放的内存,或者预测何时(如果有的话)它实际上被释放。
“垃圾收集器”比喻用于指恢复未使用的内存,因为IRL垃圾收集时不时发生,但不能依赖于特定时间发生(或已经发生)。
未引用数据的变化与语言规范无关,这是答案不简单“是”的另一个原因。它完全依赖于实现。你没有说你是在使用cPython还是Jython,还是其他一些风格。您需要参考您正在使用的实现的文档。 cPython确实公开了它的垃圾收集器,参考例如https://docs.python.org/2/library/gc.html和https://docs.python.org/3/library/gc.html,Jython使用Java垃圾收集器。您可能会或可能不会影响他们的行为,您应该参考您正在使用的口译员的文档。
不一定立即回收可释放内存的原因通常与性能有关 - 为什么不需要的工作? - 但是如果你的翻译确实推迟了回收,那么在某些时候,当某些标准资源变得有限时,会做一些努力整理 - 做垃圾收集 - 这意味着99.9%的时间你不做我们需要关注回收,因为一旦解释器实现认为有必要,它就会自动处理(带有相应的管理费用)。
答案 1 :(得分:0)
是
Python有一个垃圾收集器,因此无法以任何方式访问的对象会被自动销毁,并且它们的内存将被重用于将来创建的其他对象。