链表队列ADT实现中出队操作的丢失节点是否会被垃圾回收?
链式队列dequeue操作中“丢失节点”的垃圾回收问题
会被Python的垃圾回收机制回收。
Python的垃圾回收以引用计数为核心逻辑:当一个对象不再被任何活跃的引用指向时,它的引用计数会降至0,垃圾回收器就会自动回收该对象占用的内存。
回到你的代码,执行self._head = self._head._next后,原来的头节点彻底脱离了链表,而且你的代码里没有任何其他变量持有这个节点的引用——队列的_head已经指向了下一个节点,也没有外部代码保存过这个节点的引用,所以它的引用计数会变成0,满足垃圾回收的条件。
另外你用__slots__定义_Node类的属性,这只是用来限制实例能拥有的属性、节省内存,完全不会影响垃圾回收的逻辑,只要节点没有被引用,就会被正常回收。
内容的提问来源于stack exchange,提问作者Miguel Cruz Santiago
相关产品推荐
相关产品推荐

