클래스/객체에 대한 파이썬의 변경 가능 기능을 이해하면 할당을하면 원래 변수를 변경하면 할당 된 변수/객체도 변경된다는 것입니다. 나는이 piece of code below에 대해 혼란스러워했다.파이썬 클래스 객체의 가변성이 언제 할당에 영향을 줍니까?
# 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
가 자동으로 root.left = None
번 None
로 설정되지 않습니다 어떻게 올 실행?
root.left = None은 root.left라는 이름을 None에 바인드하도록 설정합니다. 왼쪽에 묶여있는 것을 변경하지 않습니다. 그래서 노드는 어떤 것이 그것을 참조하기 때문에 존재합니다. 그것은 단지 루트입니다. 왼쪽은 더 이상 참조하지 않습니다 –
@joelgoldstick 고맙습니다 만, 나는 아직도 혼란 스럽습니다 : 다음을 수행하면 : test = root, root.left = TreeNode (5), test.left .val은 이제 5가됩니다 왜 같은 일이 위에 일어나지 않습니까? – user6175310
@joelgoldstick 목록의 변경 가능성과 비슷한 것이 여기 있다고 생각합니다. 만약 a = [1,2,3]이면 b = a를 정의하고, 이제는 [0] = 0, b [0] 자동으로 변경됩니다. 위의 예제와 같은 객체를 사용하여이 작업을 시도했지만 비슷한 결과가 발생했습니다. 나는이 코드의 구현에 대해 다른 점을 이해하지 못한다. 왼쪽은 None으로 자동 설정되지 않는다. – user6175310