我创建了一个双向链表。我的列表只包含2个元素(假设为node1
和node2
),我想删除指向列表中第一个节点(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
答案 0 :(得分:2)
按del self.head
删除对节点的引用,而不是节点本身。通过重新分配,对节点的引用将丢失。通常,在两种方式中,没有任何东西指向下一个节点。通常,只要没有对它的引用,Python就会从内存中删除一些内容。所以,在你的情况下,两者都有相同的结果。我希望重新分配,而不是删除
PS:当然,假设引用不会保存在代码中的其他地方