我正在编写一个二叉树类。而且我想删除整棵树(其中的所有节点),所以我想了解如何删除python中的对象。
我有函数del_obj(obj)。我在那儿传递了“ a”字样,但无法正常工作。正如我想的那样,它是“ a”的副本。但是id方法显示相同的id。我很困惑。
def del_obj(obj):
print(id(obj)) # 111
del obj
a = 3
print(id(a)) # 111
del_obj(a)
print(a) # 3
答案 0 :(得分:3)
在Python中,del
不会删除对象,而是会删除名称。仅当无法再使用任何名称访问该对象时,该对象才会被删除。
一旦无法通过任何名称访问树的根,则只能通过与该根对象相关联的名称访问树中的所有其他节点,它们自身将变得不可访问,并且所有节点都将被删除,除非某人的另一个名字指向其中一个。
(如果您有一个名称的 cycle ,那仍然应该全部清除,但是在这种情况下CPython实现有一些陷阱。但是由于您将数据结构描述为一棵树,这可能不适用于您的情况。)
答案 1 :(得分:2)
您需要在外部范围内说del a
。您的del_obj
函数不起作用,因为它只会删除自己的引用,这不会影响该函数之外的代码。