J'ai un problème avec python ici. Si je passe un tableau grâce à une fonction récursive qui ajoute quelque chose au tableau à chaque fois qu'il est appelé, le tableau est modifié dans chaque casPython: empêcher que le tableau d'arguments soit globalement modifié
code:
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
Exécution via test(5,[])
Résultats:
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']
Problème réel:
Chaque fonction enfant modifie le tableau dans toutes les fonctions parentes. Comment puis-je empêcher cela?
Copie la liste dans un nouveau et en le modifiant entraîne le même résultat que ci-dessus
myListNew=myList
myListNew.append("Test")
+1 - Exactement, il suffit de passer 'test (n-1, myList [:])' – sberry
Y at-il une solution de contournement pour ce faire sur les tableaux (dictionnaires) aussi? il dit "type non lavable". – lamas
Extraire le module de copie dans la bibliothèque: 'another_d = copy.copy (d)'. Ou essayez 'another_d = dict (d)'. – jcdyer