gpt4 book ai didi

python - 删除链表中的节点 - 是否需要任何形式的垃圾收集?

转载 作者:行者123 更新时间:2023-12-01 10:17:38 25 4
gpt4 key购买 nike

[Python 3.8]

删除链表中的节点时,是否可以简单地更改下一个节点?

在这里,我们简单地通过改变指针来“删除”节点 1。

来自 C++ 世界,这让我有点紧张。节点 1 的内存是否会自动回收,因为没有对它的引用?节点 1 到底发生了什么?

之前

[Sentinel] -> [Node 0] -> [Node 1] -> [Node 2] -> [Node 3] -> None

之后

[Sentinel] -> [Node 0] -┐ [Node 1] -┬-> [Node 2] -> [Node 3] -> None
└-----------┘

这是合法的吗?

最小的、完整的、可验证的示例

def delete(self, val):
n = self.sentinel
while n.next != None:
if n.next.data == val:
n.next = n.next.next # reassign pointer - no del, free, delete, or the like.
return
n = n.next

最佳答案

在 CPython 中,垃圾收集的主要形式是通过引用计数。当对象的引用计数降至 0 时,立即自动回收该对象。

Python 的其他实现通常不使用引用计数,但垃圾仍然会自动回收 - 最终。那么你只会丢失“立即”部分。

这是一件好事,因为无论你怎么看,在 Python 中你永远找不到任何可以让你强制释放内存的东西。特别是 del 语句

    del object

“删除”一个对象。它只是删除了名称 object 的当前绑定(bind),将 object was 绑定(bind)到的对象的引用数量减少了 1。可能或可能不要让那个对象成为垃圾。

关于python - 删除链表中的节点 - 是否需要任何形式的垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59978988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com