[Linux-bruxelles] um mystère pythonien

Didrik Pinte dpinte at itae.be
Ven 23 Juin 16:46:53 CEST 2006


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'] !!!!!

Didrik
-------------- section suivante --------------
Une pièce jointe autre que texte a été nettoyée...
Nom: signature.asc
Type: application/pgp-signature
Taille: 189 octets
Desc: This is a digitally signed message part
URL: </pipermail/linux-bruxelles/attachments/20060623/a757df72/attachment-0001.sig>


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