Fonction qui modifie la variable globale

Résolu/Fermé
Ségolène - Modifié par Ségolène le 25/02/2016 à 16:38
 Ségolène - 26 févr. 2016 à 16:25
Bonjour,
Je voudrais créer une fonction qui travaille sur une liste sans modifier la liste de départ, mais la liste de départ se retrouve modifiée quand même.
En recréant mon problème sur un exemple simple, je fais :
test=[[1,2],[3,4],[5,0],[6,7],[8,9],[10,11]]

def mafonction(liste):
l=liste[:]
for i in l:
i.append(0)
if i[1]==0:
l.remove(i)
return(l)


Si j'applique mafonction à test, j'obtiens
- en sortie de mafonction(test) : [[1,2,0],[3,4,0],[6,7,0],[8,9,0],[10,11,0]], ce qui est bien ce que je veux
- en revanche, ma liste de départ est modifiée : le plus curieux, c'est que c'est seulement la première partie de la boucle (ajouter des zéros) qui est appliquée sur la variable de départ, la seconde partie n'est bien appliquée qu'à l'intérieur de la fonction :
test = [[1,2,0],[3,4,0],[5,0,0],[6,7,0],[8,9,0],[10,11,0]]

Avre-vous déjà rencontré ce problème et existe-t-il une solution ?
Merci d'avance


1 réponse

Bon, j'ai finalement résolu mon problème : comme c'est une liste de liste, liste[:] ne suffit pas, il faut écrire [i[:] for i in liste]. Donc ça fonctionne avec le code :

def mafonction(liste):
l=[i[:] for i in liste]
for i in l:
i.append(0)
if i[1]==0:
l.remove(i)
return(l)
0