В приведенном ниже коде я определяю класс Node, который при создании экземпляра должен иметь пустое свойство childarr.Затем я создаю экземпляр класса и передаю его методу expnd.Это добавляет три новых узла в массив childarr.Как и ожидалось, первый оператор print показывает, что длина childarr экземпляра "node" равна 3. Но теперь я создаю новый экземпляр класса "Node" с нуля.Так как я указал в методе init класса, что если для этой переменной ничего не передается, то это должен быть пустой массив, я ожидал, что nn будет иметь пустое свойство childarr.Тем не менее, второе печатное заявление показывает, что на самом деле у него тоже трое детей.
Меня очень смущает, почему на nn влияет какой-то код, который произошел до того, как был создан его экземпляр, и не имеет к этому никакого отношения.
Кто-нибудь знает причину такого поведения и что я упускаю с точки зрения наилучшей практики?
class Node():
def __init__(self, childarr=[]):
self.childarr = childarr
def expnd(node):
for i in range(3):
newnode = Node()
node.childarr.append(newnode)
node=Node()
expnd(node)
print("Length of child array of expanded node:" + str(len(node.childarr)))
nn = Node()
print("Length of child array of new, unrelated node:" + str(len(nn.childarr)))