Переместить корень и данные в определение __init__
. В существующем состоянии они определены как атрибуты класса. Это делает их общими для всех экземпляров класса Tree. Когда вы создаете два дерева (tree
и tree2
), они оба совместно используют один и тот же список, доступ к которому осуществляется с помощью self.data
. Чтобы каждый экземпляр имел свой собственный атрибут экземпляра, вы должны переместить объявление в функцию __init__
.
def __init__(self, equation):
self.root = equation
self.data = []
Также используйте
if isinstance(item,Tree): # This is True if item is a subclass of Tree
вместо
if (type(item) == type(self)): # This is False if item is a subclass of Tree
и изменить
data = self.data
до
data = self.data[:]
в getRight
. Когда вы говорите data = self.data
, тогда имя переменной data
указывает на тот же список, на который указывает self.data
.
Когда вы впоследствии изменяете data
, вы также изменяете self.data
.
Чтобы изменить только data
, вы должны скопировать список. self.data[:]
использует нотацию срезов для возврата копии списка. Обратите внимание, что элементы self.data
могут иметь значение Tree
с, а self.data
и self.data[:]
могут содержать идентичные элементы. Я не думаю, что ваш код требует, чтобы эти элементы были скопированы, но вам нужно будет рекурсивно копировать self.data
, если это так.
def getRight(self):
data = self.data[:]
data.reverse()
return data