Python类的易变性

2024-04-29 17:02:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python有问题。。我有一个二叉树节点类型:

class NODE:
        element = 0
        leftchild = None
        rightchild = None

我必须实现一个函数deletemin:

^{pr2}$

然而,当我试图在二叉树上测试这个问题时:

  1
 / \
0   2

它应该删除0,只需将其设置为null,但我得到的结果是:

  0
 / \
0   2

为什么我不能在python中使一个函数中的节点无效?他们是这样做的吗?在


Tags: 函数nonenode类型节点elementnullclass
2条回答
class Node:
    element = 0;
    left_child = None
    right_child = None

def delete_min( A ):
    if A.left_child is None:
        return A.right_child
    else:
        A.left_child = delete_min(A.left_child)
        return A

tree = delete_min(tree)

Python通过对象引用传递参数,就像java一样,而不是通过变量引用。当你把一个局部变量(包括一个参数)赋给一个新值时,你只改变了局部变量,而没有改变其他的(不要把它与调用赋值函数或赋值给对象的属性相混淆:我们说的是对裸名的赋值)。在

Python中的首选解决方案通常是返回多个值(根据需要而定),并在调用者中适当地分配它们。因此deletemin将返回两个值,current returnval和modified node,调用者将根据需要分配后者。一、 电子邮箱:

def DELETEMIN( A ):
        if A.leftchild is None:
                return A.element, A.rightchild
        else:
                return DELETEMIN( A.leftchild )

在调用者中,您以前有foo = DELETEMIN( bar ),您可以使用

^{2}$

括号内有特殊的大写和空格,顺便说一句,但这是另一个问题;-)。在

<> P>没有办法获得“指针或引用到一个调用方的BARNAMEY”(以Python或java),方式是C++或C++。还有其他替代方法,但是它们需要不同的安排,而不是您所喜欢的,所以我建议使用这里所示的多个返回值方法。在

相关问题 更多 >