@limaximy

Почему изменяется узел, который я создаю и засовываю в массив?

Создаю узел, который имеет пустой массив. Потом создаю еще один узел и засовываю его в этот массив (все через классы). И первый узел в массиве имеет этот узел, но почему то второй узел имеет в массиве ссылку на самого себя (хотя должен быть пустой массив)
class Node:
	def __init__(self, p_type, p_text, p_mas_connections = []):
		self.type = p_type
		self.text = p_text
		self.mas_connections = p_mas_connections

	def print_connections(self):
		print(self.type)
		print(self.text)
		print(self.mas_connections)

	def change_connections(self, p_position, p_node): 
		self.mas_connections[p_position] = p_node

	def append_connections(self, p_node):
		print(f'self.mas_connections {self.mas_connections}')
		self.mas_connections.append(p_node)
		print(f'self.mas_connections {self.mas_connections}')

	def return_selected_node_from_mas_connections(self, p_position):
		return self.mas_connections[p_position]

root = Node('key_word', 'program', [Node("identifier", None)])

current = root.return_selected_node_from_mas_connections(0)
current.print_connections()

s = Node('tochka_s_zapyatoy', ';')
s.print_connections()

current.append_connections(s)
s.print_connections()


Вывод
identifier
None
[]
tochka_s_zapyatoy
;
[]
identifier
None
[<__main__.Node object at 0x000001AEDE08C3E0>]
tochka_s_zapyatoy
;
[<__main__.Node object at 0x000001AEDE08C3E0>] # Вот здесь должен быть просто []

В чем я запутался?
  • Вопрос задан
  • 45 просмотров
Решения вопроса 1
@Everything_is_bad
Стандартная ошибка новичка в
def __init__(self, p_type, p_text, p_mas_connections = []):
правильно p_mas_connections=None, а далее в коде например так
self.mas_connections = [] if p_mas_connections is None else p_mas_connections

гуглить "python mutable default argument"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы