我们需要在函数中使用 root = None 吗? (python BST,引用计数)

Do we need to use root = None during in the function? (python BST, reference counting)

我正在练习删除 BST 中的节点并遇到以下代码。

def deleteNode(root, key):

    if root is None:
        return root

    if key < root.key:
        root.left = deleteNode(root.left, key)

    elif(key > root.key):
        root.right = deleteNode(root.right, key)

    else:
        if root.left is None:
            temp = root.right
            root = None
            return temp

        elif root.right is None:
            temp = root.left
            root = None
            return temp

        temp = minValueNode(root.right)
        root.key = temp.key
        root.right = deleteNode(root.right, temp.key)

    return root

我的问题是我们需要root = None这一行吗?根据引用计数,我觉得 root 会被自动销毁,因为像 parent.child 这样的唯一引用被分离了。非常感谢任何解释。

鉴于 root = None 紧跟在 return temp 之后,它只是(重新)绑定了一个局部变量,该变量立即再次被丢弃并且没有任何效果。

在给定的代码中,可以删除行 root = None 而不会更改 运行 代码的结果。

大概是代码从另一种语言翻译得太直了,在这种语言中,分配给变量会改变内存位置的内容。

但在 Python 中,赋值运算符 = 只是将一个新名称 1 绑定到一个已经存在的对象(在这种情况下它给出了名称root 到对象 None) 并且不会更改对象或内存中的任何其他对象。


1 至少在左侧有“简单名称”,分配给 a[i].[=17 这样的东西时会稍微复杂一些=]

不,这些行不是必需的。但是,如果您删除了任一分支中的早期 return,则需要设置 root = None.