2016-12-02 30 views
1

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

现在我的问题是 - (例-1)如果我设置self.headself.head = self.head.next并设置node2prev(以前)属性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 

回答

2

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

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