[Linux-bruxelles] um mystère pythonien

Marc Van Craesbeeck marcvancraesbeeck at scarlet.be
Ven 23 Juin 17:47:47 CEST 2006


Le vendredi 23 juin 2006 à 16:46 +0200, Didrik Pinte a écrit :
> On Fri, 2006-06-23 at 16:18 +0200, Marc Van Craesbeeck wrote:
> > Le vendredi 23 juin 2006 à 12:43 +0200, Didrik Pinte a écrit :
> > > On Fri, 2006-06-23 at 12:26 +0200, Marc Van Craesbeeck wrote:
> > > > Bonjour la liste
> > > > 
> > > > Quelqu'un peut-il m'expliquer ce "mystère" en python:
> > > > 
> > > > 	liste1=['a']
> > > > 	liste2=[]
> > > > 	parametre=['b']
> > > > 	for x in range(2):
> > > > 		liste2.append(liste1)
> > > > 		liste2[x].insert(x,parametre[0])
> > > > 
> > > > Il me sort pour liste2: 
> > > > 
> > > > 	[['b', 'b', 'a'], ['b', 'b', 'a']]
> > > 
> > Merci pour la réponse
> > > Logique, si tu décomposes ta boucle étape par étape :
> > > 
> > > x = 0
> > > append liste2 = [['a']]
> > > insert liste2 = [['b', 'a']]
> > > x = 1
> > > append liste2 = [['b', 'a'], ['b', 'a']]
> > La, je coince: je crois lui demande d'ajouter liste1 ['a'] à liste2 donc
> > l2=?[['b', 'a'], ['a']]
> 
> Hé non, lorsque tu as fait liste2.append(liste1), tu as insérer dans
> liste2 une référence vers la liste 1. Donc lorsque tu as fait
> liste2[x].insert(x,parametre[0]), cela a fait ceci lors de la première
> étape:
> 
> liste2[0] --> ceci te renvoie liste1
> liste2[0].insert(0, parametre[0]) --> ceci insère dans liste1 en
> position 0 le parametre[0]
> 
> Donc au final : liste2 = [['b', 'a']]
> et liste1 = ['b', 'a'] !!!!!
Merci beaucoup, le mystère est levé. 
La digestion du mystère me prendra encore du temps.
-- 
Marc  
 





Plus d'informations sur la liste de diffusion Linux-bruxelles