双向链表 - 垃圾收集

时间:2016-12-02 15:28:25

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

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

现在我的问题是 - (示例-1 )如果我将self.head设置为self.head = self.head.next并设置node2 prev(之前)属性为None - 这是否从内存中完全删除了第一个节点?因为node1现在没有其他参考。或者必须调用del方法,如第二个示例(示例-2)所示?从meomory中删除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

1 个答案:

答案 0 :(得分:2)

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

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