python如何通过引用传递?

python如何通过引用传递?,python,pass-by-reference,Python,Pass By Reference,我尝试在BST中实现删除节点。 这是我的部分代码 def delete(node,key): #Locate that node with value k cNode=node target=None while cNode: if cNode.value==key: target=cNode break elif node.value>key: cNode=cN

我尝试在BST中实现删除节点。 这是我的部分代码

def delete(node,key):
#Locate that node with value k
    cNode=node
    target=None
    while cNode:
        if cNode.value==key:
            target=cNode
            break
        elif node.value>key:
            cNode=cNode.lChild
        elif node.value<key:
            cNode=cNode.rChild
    target=None
    return node
def delete(节点,键):
#找到值为k的节点
cNode=节点
目标=无
而中海油:
如果cNode.value==键:
目标=cNode
打破
elif节点.值>键:
cNode=cNode.lChild

elif node.value
target=None
仅将变量
target
重新绑定到新值,
None
。以前绑定到的
目标
不会改变

您必须跟踪父节点,并将其
lChild
rChild
属性改为
None

def delete(node,key):
    cNode = node
    target = parent = None
    while cNode:
        if cNode.value == key:
            target = cNode
            break
        elif cNode.value > key:
            parent, cNode = cNode, cNode.lChild
        elif cNode.value < key:
            parent, cNode = cNode, cNode.rChild

    if target:
        if parent:
            if parent.lChild is target:
                parent.lChild = None
            else:
                parent.rChild = None
        else:
            # target is top-level node; perhaps return None in that case?
    return node
def delete(节点,键):
cNode=节点
目标=父项=无
而中海油:
如果cNode.value==键:
目标=cNode
打破
elif cNode.value>键:
父项,cNode=cNode,cNode.lChild
elif cNode.value<键:
父项,cNode=cNode,cNode.rChild
如果目标是:
如果是家长:
如果parent.lChild是目标:
parent.lChild=无
其他:
parent.rChild=None
其他:
#目标是顶级节点;在这种情况下,可能不返回任何值?
返回节点

这里没有从树中删除任何内容的代码。您可能需要断开父节点和子节点之间的链接,但我将目标节点(即叶节点)设置为“无”,它还应该更改原始树,对吗?Python已经通过引用传递值;它从不默默地复制任何东西。但它不会通过引用传递变量,因为这样做毫无意义;Python变量不是内存位置,它们只是某个名称空间中的名称。@lexie,不,target只是
delete
函数中的一个局部变量,您可以将其设置为None。@no:我认为OP理解这一点,否则他不会问这个问题;他只是不明白为什么这是真的,或者他应该怎么做。谢谢Martjin,我明白我的问题。是的,我会的,看起来我只能在2分钟内做到