Mein Verständnis von Pythons veränderbarer Funktion für Klassen/Objekte ist, dass, wenn Sie eine Zuweisung machen, jede Änderung am Original auch die zugewiesene Variable/das Objekt ändert. Ich habe darüber verwirrt piece of code below.Wann beeinflusst die Änderbarkeit von Python-Klassenobjekten Zuweisungen?
# Recursive solution to Flatten Binary Tree to Linked List by LeetCode
# Definition for a binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param root, a tree node
# @return root, a tree node
def flattenHelper(self, root):
if root == None:
return None
else:
left = root.left
right = root.right
root.left = None # Truncate the left subtree
current = root
# Flatten the left subtree
current.right = self.flattenHelper(left)
while current.right != None: current = current.right
# Flatten the right subtree
current.right = self.flattenHelper(right)
return root
# @param root, a tree node
# @return nothing, do it in place
def flatten(self, root):
self.flattenHelper(root)
return
Frage: Wie kommen die Variable left
nicht automatisch None
einmal root.left = None
fertig ausgeführt wird?
root.left = None setzt den Namen root.left, um an None zu binden. Es ändert nichts an dem, an das es gebunden ist. Der Knoten existiert also immer noch, da etwas darauf verweist. es ist nur, dass root.left es nicht mehr referenziert –
@joelgoldstick Danke, aber ich bin immer noch verwirrt: Wenn ich Folgendes tue: test = root, root.left = TreeNode (5), test.left .val wird jetzt 5 Warum passiert das gleiche nicht oben? – user6175310
@joelgoldstick Ich dachte etwas Ähnliches wie die Veränderlichkeit von Listen passiert hier: wenn ich a = [1,2,3] habe, dann definiere b = a, wenn ich jetzt a [0] = 0 ändere, wird b [0] ändert sich auch automatisch. Ich habe das mit Objekten versucht, wie im obigen Beispiel, und eine ähnliche Sache ist passiert. Ich verstehe nicht, was an der Implementierung dieses Codes anders ist, dass links nicht automatisch auf None gesetzt wird. – user6175310