Мое понимание изменчивой функции python для классов/объектов заключается в том, что если вы выполняете присваивание, то любое изменение в оригинале также изменяет назначенную переменную/объект. Я смутился об этом piece of code below.Когда изменчивость объектов класса python влияет на присвоения?
# 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
Вопрос: Каким образом переменная left
автоматически не приготовьтесь к None
раз root.left = None
выполняется?
root.left = None устанавливает имя root.left для привязки к None. Это не изменяет то, что осталось. Таким образом, узел все еще существует, поскольку что-то ссылается на него. это просто, что root.left больше не ссылается на него –
@joelgoldstick Спасибо, но я все еще смущен: если я делаю следующее: test = root, root.left = TreeNode (5), test.left .val теперь будет 5 Почему одно и то же не происходит выше? – user6175310
@joelgoldstick Я думал, что здесь происходит что-то похожее на изменчивость списков: если у меня есть a = [1,2,3], тогда определите b = a, теперь, если я изменю a [0] = 0, b [0] будет автоматически меняются. Я попробовал это с объектами, как в примере выше, и подобное произошло. Я не понимаю, что отличается от реализации этого кода, и он не получает значение None автоматически. – user6175310