Если вы хотите out
для хранения значений последнего списка/кортежа в nodes
без них получать возврат к 0.0
вам необходимо либо создать копию этого объекта (nodes[-1]
) или вручную скопировать их в новый список/объект кортежа , если я правильно вас понимаю, и это ваша цель. В настоящее время вы просто создаете ссылку на узлы [-1], прежде чем переходить через двумерный массив и сбросьте все значения до 0.0
, что означает, что out
по-прежнему будет ссылаться на референт в памяти, который вы сбросили до 0.0
значений.
out = nodes[-1].copy() # This is the list/tuple with the (non-reset) values that you want to return
... # iterate through the array here and reset
return out
Это теперь будет возвращать копию (т.е. новую ссылку на новый, уникальный референта в памяти) последнего элемента nodes
с государством он был при создании копии (до итерация сброса).
Не уверен, что я правильно понял вас, но забыл, что списки и кортежи - это объекты в Python и вести себя как таковые, это непростая ошибка.
Это означает, что: l0 = [0, 1] l1 = l0 l2 = l0.copy() l0.append (2)
print(l0) # prints [0, 1, 2]
print(l1) # prints [0, 1, 2]
print(l2) # prints [0, 1]
l0
и l1
две ссылки на то же самое объект/референт в памяти. Через операцию copy()
l2
становится ссылкой на уникальный и не идентичный референт в памяти.
Дополнение: Обратите внимание: list.copy() является, как указано в комментариях, доступным только в Python 3 и возвращает мелкую копию. Используйте copy.copy()
/copy.deepcopy()
, чтобы создать мелкую/глубокую копию соответственно; этот модуль доступен в Python 2 и Python 3. В качестве альтернативы, мелкой копия списка может быть получена через list(list_to_copy)
.
Документация здесь:
Что должен делать ваш код? – Simone
Почему бы просто не вернуть self.nodes [-1]? – doctorlove
Я подозреваю, что вы создали список списков без создания нового значения для каждого вложенного списка; классическая ошибка начинающего Питона. Как создается 'self.nodes'? –