Изменение в переменной внутри цикла while не отражается за пределами цикла в Python 3 - PullRequest
0 голосов
/ 11 марта 2019

У меня есть переменная (названная root), определенная вне цикла while, и я делаю изменения в ней внутри цикла while, но эти изменения не отражаются вне цикла while. Я инициализировал свою переменную root как TreeNode со значением OLD_VALUE, а затем изменил ее значение на NEW_VALUE внутри цикла while. После печати значения root вне цикла оно все еще показывает исходное значение, т.е. OLD_VALUE. Итак, псевдокод выглядит следующим образом (я могу поделиться реальным кодом при необходимости):

class TreeNode: #Defines nodes of a binary tree
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None

class Solution(object): #this is my main class where I have a problem
    def buildTree(self, pre, ino):
        ##some code
        root = TreeNode(OLD_VALUE) #This is the variable in question
        stack = [] #Basically I am sending the variable 'root' through this stack
        stack.append([item1, item2, item3, item4, root])
        while(stack):
            all_items = stack.pop()
            ##some code
            all_items[4] = TreeNode(NEW_VALUE) #Note, all_items[4] is root actually
            ##some code
            (#val1, val2, val3, val4 are some computed values)
            stack.append([val1, val2, val3, val4, all_items[4].right]) #Note, all_items[4] is root
            stack.append([val1, val2, val3, val4, all_items[4].left]) #Note, all_items[4] is root
        print(root.val)
        #It prints OLD_VALUE instead of NEW_VALUE

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Вы просто присваиваете значение и помещаете его в стек за пределами цикла. В цикле while вы не выполняете никаких операций для установки нового значения переменной root. Вы просто вставляете корневое значение в цикл. Вот почему он показывает одинаковое значение внутри и вне цикла.

0 голосов
/ 11 марта 2019

Это потому, что вы не меняете значение root в цикле while. Вы изменили all_items и сложили, но не root. Вот почему нет никаких изменений, потому что вы не назначаете никаких изменений через эту переменную

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...