我想知道调用self._insertInteral(value, self.root.rightChild)
中的哪些参数是按值而哪些是参考?我还在学习Python,并且正在阅读Python中的对象方法论。我认为我对该主题的误解可能是我插入二叉树的函数不会导致插入值的原因。
这是我的代码:
class Node:
def __init__(self, leftChild, rightChild, value):
self.leftChild = leftChild
self.rightChild = rightChild
self.value = value
class BinaryTree:
def __init__(self, root):
self.root = root
def _insertInternal(self, value, root):
if root is None:
root = Node(None, None, value)
print 'new node, root.value = ' + str(root.value)
return
if root.value > value:
self._insertInternal(value, root.leftChild)
else:
self._insertInternal(value, root.rightChild)
def insert(self, value):
print 'attempting to insert value = ' + str(value)
if self.root is None:
self.root = Node(None, None, value)
return
elif self.root.value > value:
print str(self.root.value) + '>' + str(value)
self._insertInternal(value, self.root.leftChild)
else:
print str(self.root.value) + '<' + str(value)
self._insertInternal(value, self.root.rightChild)
if __name__ == '__main__':
root = Node(None, None, 10)
tree = BinaryTree(root)
print tree.root.leftChild
print tree.root.rightChild
print tree.root.value
tree.insert(5)
print tree.root.leftChild
print tree.root.rightChild
print tree.root.value
我确实查看了这篇文章Understanding Python's call-by-object style of passing function arguments但是特别想知道这个例子。
答案 0 :(得分:2)
Python是pass by assignment。在BinaryTree._insertInternal
内,root
参数的赋值(也是该方法的scobe中的局部变量)最初被赋予根节点的值(在这种情况下,该值是对象引用),并且语句root = Node(None, None, value)
是一个新的赋值,因此它与最初传入的不同,因此与实例的self.root
不同。