這是代碼。這是一個標準的二叉樹類。在不使用臨時變量的情況下交換類中的變量
在else子句,我可以除去叔變量,只是這樣做:
BinaryTree(newNode).leftChild, self.leftChild = self.leftChild, BinaryTree(newNode)
將這項工作?它看起來像我調用BinaryTree類兩次,會創建兩個不同的實例嗎?
這是代碼。這是一個標準的二叉樹類。在不使用臨時變量的情況下交換類中的變量
在else子句,我可以除去叔變量,只是這樣做:
BinaryTree(newNode).leftChild, self.leftChild = self.leftChild, BinaryTree(newNode)
將這項工作?它看起來像我調用BinaryTree類兩次,會創建兩個不同的實例嗎?
不幸的是,您需要能夠跟蹤新創建的BinaryTree
實例和之前的值,同時您已經編寫了它,但在此場景中使用同時分配將不起作用。
不過,如果你允許leftChild
在構造函數中指定了新的BinaryTree
實例可以與創建馬上:
class BinaryTree:
def __init__(self,rootObj, leftnode=None, rightnode=None):
self.key = rootObj
self.leftChild = leftnode
self.rightChild = rightnode
def insertLeft(self,newNode):
#if self.leftChild == None: pass leftnode=None to constructor.
# which is the same as passing leftnode=self.leftChild
self.leftChild = BinaryTree(newNode, leftnode = self.leftChild)
這樣,新創建的節點都有自己的leftChild
屬性在初始化設置所以沒有必要在insertLeft
中手動執行此操作。
在BinaryTree
中,您必須創建一個臨時變量,因爲使用Object。如果是一個整數,可以是:
a = 5
b = 3
a += b # a = 8
b = a - b # b = 5
a -= b # a = 3
print(a)
>>3
print(b)
>>5
你可以採取左/右孩子爲可選參數'__init__',那麼你可以做'self.leftChild =二叉樹(newNode,leftChild = self.leftChild)'(這也將節省你明確檢查的麻煩'如果self.leftChild == None' –
要回答你的問題,是的。你最終會創建兩個不同的實例。 –
你不會有任何引用新創建的對象在那個電話之後,它會被垃圾收集。 –