Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2820 connectés 

  FORUM HardWare.fr
  Programmation
  Python

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2331540
hwlr
Posté le 06-04-2019 à 18:36:13  profilanswer
 

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
mood
Publicité
Posté le 06-04-2019 à 18:36:13  profilanswer
 

n°2331554
MaybeEijOr​Not
but someone at least
Posté le 07-04-2019 à 12:30:55  profilanswer
 

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.
n°2331568
hwlr
Posté le 07-04-2019 à 18:24:35  profilanswer
 

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 ! :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

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

 

Sujets relatifs
UPDATE sql avec calcul de la valeur à modifierAide vba word choix dans une liste
Supprimer un doublon dans une liste pythonliste des feuilles d'un fichier excel
Comment Modifier le contenu d'un fichier txt chaque jour par csvPerl - Tableau associatif et liste
[A priori RESOLU] question pour un cas de si multipleNotification sur smartphone quand un fichier sur PC est modifié
modifier menus contextuelscopier tuple dans liste
Plus de sujets relatifs à : [résolu] liste A dans B, modifier A modifie B ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR