[英]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.