【问题标题】:Python: How to Completely delete Linked List?Python:如何完全删除链表?
【发布时间】:2016-06-28 16:32:15
【问题描述】:

假设我对Node 有这样的类定义

class Node:
    def __init__(self, data, next):
        self.data = data
        self.next = next

我还有head 变量指向链表的开头。

设置head = None完全删除链表就够了吗?我想 gc 应该做它的工作?

我将它与c/c++ 进行比较,您仍然应该遍历整个列表并释放每个元素。

【问题讨论】:

  • python 使用引用计数...如果将 head 分配给前导节点,然后将 head 重新分配给其他东西...前导节点的引用计数减少一...如只要引用计数为零,垃圾收集器就会对其进行垃圾收集......如果你担心内部内存管理,python 可能不是适合你的工具......(它往往会做正确的事情......但内部通常是特定于实现的)
  • @JoranBeasley 如果前导节点的引用计数为 0,那么它将被垃圾收集,所有其他链接节点将被链式收集?
  • 只要子节点不指向父节点

标签: python linked-list


【解决方案1】:

通常,您甚至不需要做任何事情。当head 变量的生命周期结束时,如果您没有对列表的任何其他引用,则该列表将变得无法访问并且可以自动收集。在 CPython 上,它通常会立即被收集,但您不应该依赖它。

如果您想在head 变量的生命周期结束之前使列表符合收集条件,设置head = None 将起作用,del head 也一样。 (注意del 的意思是“取消设置这个变量”,而不是“删除这个对象”。)

【讨论】:

    【解决方案2】:
    def deleteAll(self):
        temp = self.head
        if temp is None:
            print("\n Not possible to delete empty list")
        while temp:
            self.head = temp.get_next()
            temp = None
            temp = self.head
    

    【讨论】:

    • 尝试在你的代码中附上一些为什么如何解决问题的解释,在这种情况下,为什么它是必要的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2018-10-22
    • 2020-11-01
    相关资源
    最近更新 更多