如何删除python3中的对象。*

时间:2018-12-28 00:34:42

标签: python memory

我正在编写一个二叉树类。而且我想删除整棵树(其中的所有节点),所以我想了解如何删除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  

2 个答案:

答案 0 :(得分:3)

在Python中,del不会删除对象,而是会删除名称。仅当无法再使用任何名称访问该对象时,该对象才会被删除。

一旦无法通过任何名称访问树的根,则只能通过与该根对象相关联的名称访问树中的所有其他节点,它们自身将变得不可访问,并且所有节点都将被删除,除非某人的另一个名字指向其中一个。

(如果您有一个名称的 cycle ,那仍然应该全部清除,但是在这种情况下CPython实现有一些陷阱。但是由于您将数据结构描述为一棵树,这可能不适用于您的情况。)

我建议您阅读经典文章Facts and myths about Python names and values

答案 1 :(得分:2)

您需要在外部范围内说del a。您的del_obj函数不起作用,因为它只会删除自己的引用,这不会影响该函数之外的代码。

相关问题