如何在Python中删除对象

问题描述 投票:0回答:1

我有一个简单的代码

class Node:
    def __init__(self,val = 0):
        self.val = val
        self.right = None
       
def func(obj,n):
    if not n:
        obj = None
        return
    
    obj.right = Node()
    func(obj.right,0)
    
root = Node()
func(root,1)

#print(root.right.val)
#this gives me 0. How?? it should give me error

当我运行此代码时,我注意到 obj=None 没有执行任何操作,并且我的初始对象(上述程序中的根)仍然具有 root.right 组件,其值为 0。任何人都可以解释一下发生了什么以及如何修复问题? 我想要的期望行为是,root.val 应该为 0,root.right 应该为 None。谢谢你。

python object oop
1个回答
1
投票

在 Python 中,函数参数是通过赋值传递。您的代码看起来有点类似于以下内容:

root = Node()
obj = root
obj = None

如您所见,外部作用域中的变量

root
没有被重新分配给新值。并且因为它仍然引用旧值,所以它不会被垃圾收集清理。

这里一个简单的解决方案是

return
应取代 root 的新值。这样,您就可以允许使用函数的结果来重新分配从外部作用域传入的变量。例如

def func(obj,n):
    if not n:
        return None
    
    obj.right = func(Node(), 0)
    return obj

root = Node()
root = func(root,1)
© www.soinside.com 2019 - 2024. All rights reserved.