【发布时间】:2016-04-02 13:54:13
【问题描述】:
我正在编写一个决策树,我决定一个不错的实现是分支的类/对象结构(至少在 C++ 中)。为了简单起见,我将把它分解成必要的部分:
class DecisionTreeBranch:
def __init__(self):
parent = None
leftBranch = None
rightBranch = None
parent 声明通往超级决策的路径,leftBranch、rightBranch 定义以下决策。
我想做的事:
现在向下不是问题,而是向上移动:假设这棵树首先由左分支定义,所以如果我最终得到一个叶子。我往上走一步,取右分支,继续建造树(如果我往上走,定义了左右,我再往上走一步,依此类推)。
目的是通过三个参数遍历树:parent(向上)和leftBranch、rightBranch(向下)
问题
如果我愿意,例如C++ 那么这不会是一个问题,我会用 call-by-reference 定义父级。但是我最近开始用 Python 编程课程,不幸的是我总是以 call-by-value 表达式结束,这肯定会丢失上述分支的所有信息。
基本上我正在寻找类似的东西:
[...]
# define way to former branch
&curDecision.parent = &oldDecision
oldDecision = curDecision
# continue with the next/new decision on the current level
curDecision = DecisionTreeBranch()
[...]
谁能帮帮我?
亲切的问候
【问题讨论】:
-
你的python代码实际上是什么样的?目前尚不清楚您是如何解决您所描述的问题的。
-
@pvg 很像:
curDecision.parent = oldDecision和oldDecision = curDecision -
在 Python 中,除了引用它们之外,您永远不会处理类实例(在这方面它类似于 Java)。当您将这些引用之一传递给函数时,该引用是按值传递的。该函数可以通过引用操作被引用的对象,但它不能修改调用者的引用副本。
-
我很确定。 python中的所有实例都是堆分配的。当您将 1 分配给变量时,该变量最终会成为实例引用的名称。
标签: python class data-structures pass-by-reference