import weakref
class Node:
def __init__(self,data):
self.data = data
self.left = None
self.right = None
def add_rignt(self,node):
self.right = node
# node.left = self
node.left = weakref.ref(self)
def __str__(self):
return "node:<%s>" % self.data
def __del__(self):
print("in __del__: delete %s" % self)
def create_Linklist(n):
head = current = Node(1)
for i in range(2, n + 1):
node = Node(i)
current.add_rignt(node)
current = node
return head
head = create_Linklist(1000)
head = None
import time
for _ in range(1000):
time.sleep(1)
print("run...")
input('wait...')
# 可以利用一半实一半虚保证双向链表的存在
# 解决方法:
# 1. 导入import weakref
# 2.修改 node.left = self 为 node.left = weakref.ref(self) 就可以了。
# class B:
# def __del__(self):
# print('del')
#
# import weakref
# b = B()
# b2 = weakref.ref(b) # b2是弱引用 删除b后,再删除b3就会触发del
# b3 = b2()
# del b
# del b3
执行结果: