繁体   English   中英

我如何删除python3中的对象*

[英]How can i delete objects in python3.*

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

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

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

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

我建议您阅读经典文章《 关于Python名称和值的事实与神话》

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM