self._insertInteral(value, self.root.rightChild)
の引数のうちどれが値で参照されていますか?私はまだPythonを勉強していて、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をしましたが、特にこの例に疑問を抱いた。
は、ここに私のコードです。
いいえ、理由はありません。これを考慮してください。あなたのコードで実際に(適切な場所を見つけた後で)ノードをツリーに追加しますか? – donkopotamus
あなたが投稿したリンクによれば、Pythonには値渡しや参照渡しはなく、オブジェクト渡しのみがあります。 – interjay
( '=='を使用して 'なし'と比較しないで '' x 'なら ':' 'のように' 'を使用します) – donkopotamus