[résolu] liste A dans B, modifier A modifie B ?

liste A dans B, modifier A modifie B ? [résolu] - Python - Programmation

Marsh Posté le 06-04-2019 à 18:36:13    

Bonjour,
 
En programmant une simulation je suis tombé sur quelque chose de très surprenant (pour le débutant que je suis en tout cas). Voici la situation en question :

Code :
  1. A=[0,1,2,3]              # Une première liste
  2. B=[A]                    # Une deuxième liste qui contient la première
  3. for i in range(len(A)):
  4.     A[i]=2*A[i]          # On change des valeurs dans la première liste
  5. print(B)                 # On affiche la deuxième liste dans la console


 
Jusque là rien de compliqué. C'est quand on exécute le script que ça devient surprenant. Voici ce que m'affiche la console :

Code :
  1. [[0, 2, 4, 6]]


 
Ce qui voudrait dire que changer la liste A change aussi la valeur de la liste A dans la liste B ?
 
Donc je fais appel à vous pour vérifier que mon interprétation est correcte et surtout pour savoir s'il s'agit d'un comportement normal ou d'un bug inhérent aux 2 PCs sur lesquels j'ai testé ce script, à Spyder que j'utilise sur ces deux PCs ou à Python.
 
Voilà voilà  :)
 
EDIT: En remplaçant "B=[A]" par "B=A", le même phénomène se produit : modifier A modifie B...


Message édité par hwlr le 07-04-2019 à 18:25:15
Reply

Marsh Posté le 06-04-2019 à 18:36:13   

Reply

Marsh Posté le 07-04-2019 à 12:30:55    

Bonjour,

 

Quand tu fais :

Code :
  1. B = [A]


Tu ne copies pas la valeur de la variable A dans la variable B, tu indiques que B doit prendre la même référence que A. Le contenu de la variable A est stocké à une certaine adresse dans la mémoire de ton ordi, B va alors pointer vers cette même adresse. Quand tu modifies B tu modifies la valeur stockée à la fameuse adresse, tout comme quand tu modifies A.
Après tu as utilisé une syntaxe un peu bizarre, tu dis que B doit être une liste contenant la liste A (d'où les doubles crochets quand tu fais un print B), donc je ne sais pas ce qui se passe quand tu modifies B, notamment si tu ajoutes un terme à la liste.

 

Je te conseille de chercher un tuto sur les bases de Python, c'est très important de comprendre certaines choses comme les références ou ce qui est immuable par exemple.
Un des premiers liens sur google : http://sametmax.com/valeurs-et-references-en-python/

 

Je connais peu Python, et encore moins les tutos, certains devraient être capables de te donner de bons liens pour bien débuter.


Message édité par MaybeEijOrNot le 07-04-2019 à 12:34:47

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 07-04-2019 à 18:24:35    

Ok merci c'est beaucoup plus clair !
 
Pour la liste qui contient la liste, apparemment c'est la même chose. Quand on ajoute un terme à la liste B avec append ça ajoute aussi la référence du terme en question.
 
Je regarderai les tutos, merci encore ! :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed