双链表垃圾回收

2024-04-27 05:13:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

现在我的问题是-(Example-1)如果我将self.head设置为self.head = self.head.next,并将node2prev(previous)属性设置为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

Tags: 方法selfnone示例列表节点链接def
1条回答
网友
1楼 · 发布于 2024-04-27 05:13:21

通过del self.head,可以删除对节点的引用,而不是节点本身。通过重新分配,对节点的引用丢失。通常,在这两种情况下,没有任何东西指向下一个节点。一般来说,Python会在没有引用时立即从内存中删除某些内容。所以,在你的例子中,两者的结果是一样的。我宁愿只是重新分配,而不删除

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

相关问题 更多 >