У меня проблема с python здесь. Если бы я передать массив через рекурсивную функцию, которая добавляет что-то к массиву каждый раз, когда он вызывается, массив изменяется в каждом случаеPython: предотвращение изменения массива аргументов
Код:
def test(n,myList):
if n>0:
myList.append("Test")
print ("BEFORE CALL Instance ", n, myList)
test(n-1,myList)
print ("AFTER CALL Instance ", n, myList)
else:
return
Исполнение через test(5,[])
Результаты:
BEFORE CALL Instance 5 ['Test']
BEFORE CALL Instance 4 ['Test', 'Test']
BEFORE CALL Instance 3 ['Test', 'Test', 'Test']
BEFORE CALL Instance 2 ['Test', 'Test', 'Test', 'Test']
BEFORE CALL Instance 1 ['Test', 'Test', 'Test', 'Test', 'Test']
AFTER CALL Instance 1 ['Test', 'Test', 'Test', 'Test', 'Test']
AFTER CALL Instance 2 ['Test', 'Test', 'Test', 'Test', 'Test']
AFTER CALL Instance 3 ['Test', 'Test', 'Test', 'Test', 'Test']
AFTER CALL Instance 4 ['Test', 'Test', 'Test', 'Test', 'Test']
AFTER CALL Instance 5 ['Test', 'Test', 'Test', 'Test', 'Test']
Актуальная проблема:
Каждая дочерняя функция модифицирует массив во всех родительских функциях. Как я могу это предотвратить?
Копирование списка в новый и изменение его результатов в тот же результат, что и выше
myListNew=myList
myListNew.append("Test")
+1 - Точно, просто измените на 'test (n-1, myList [:])' – sberry
Есть ли обходное решение для этого на массивах (словари) тоже? он говорит «нераспакованный тип». – lamas
Проверьте модуль копирования в библиотеке: 'another_d = copy.copy (d)'. Или попробуйте 'another_d = dict (d)'. – jcdyer