【问题标题】:doubly linked list - garbage collection双向链表——垃圾回收
【发布时间】:2016-12-02 15:28:24
【问题描述】:

我创建了一个双向链表。我的列表仅包含 2 个元素(假设 node1node2),我想删除指向列表中第一个节点 (node1) 的 head 指针。因为在 Cpython 中,垃圾回收的主要算法是引用计数。

现在我的问题是 -(Example-1) 如果我将 self.head 设置为 self.head = self.head.next 并将 node2 prev (上一个)属性设置为 None - 这样做从内存中完全删除第一个节点?因为node1 现在没有其他引用。还是必须调用del 方法,如第二个示例(Example-2) 所示?从内存中完全删除node1的正确方法是什么?

示例 1:

def remHead(self):
  temp=self.head.next
  self.head=self.head.next
  temp.prev=None

示例 2:

def remHead(self):
  temp=self.head.next
  del self.head
  self.head=temp
  self.head.prev=None

【问题讨论】:

    标签: python python-3.x garbage-collection


    【解决方案1】:

    del self.head 删除的是对节点的引用,而不是节点本身。通过重新分配,对节点的引用将丢失。通常,在这两种方式中,都没有任何东西指向下一个节点。一般来说,一旦没有对它的引用,Python 就会从内存中删除它。所以,在你的情况下,两者都有相同的结果。我宁愿只重新分配,不删除

    PS:当然,假设引用没有保存在代码中的其他地方

    【讨论】:

      猜你喜欢
      • 2013-08-06
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 2011-01-22
      • 2011-12-21
      • 2012-01-28
      • 2013-06-27
      相关资源
      最近更新 更多