提问者:小点点

Python传递类变量作为类方法的引用


下面的python代码将AVL树的根设置为指定的值。 但是,如果通过同一个类中的函数来设置类的根变量,则似乎没有任何效果。

class AVLTree:
    class AVLNode:
        def __init__(self, value) -> None:
            self.value = value

    def __init__(self) -> None:
        self._root = None

    def insert(self, value: int) -> None:
        return self._insert(value, self._root)

    def _insert(self, value, node):
        if node is None:
            node = value
        return


avl = AVLTree()
avl.insert(5)
print(avl._root)

打印

将类变量self._root作为参数传递给成员方法似乎不会改变它的值。

我读到python通过引用传递所有类成员,仅将不可变类型(int等)作为值传递。

知道为什么我不能修改_insert函数中的self._root值吗? 谢谢


共1个答案

匿名用户

您可以完全控制如何调用_insert。 不要用node=none调用它。 类似于

def insert(self, value: int) -> None:
    if self._root is None:
        self._root = self.AVLNode(value)
    else:
        self._insert(value, self._root)

def _insert(self, value, node):
    # Assume node is not None
    ...

(无关的是,您的AVLNode类还必须存储指向其两个子类的指针,并且_insert需要适当地更新这些指针。)

相关问题