Affichage éléments de sous-liste

Résolu
BlackDarkrai Messages postés 1 Statut Membre -  
 PierrotLeFou -

Salut !!!!

j'ai du mal à comprendre pourquoi ma ligne " myListe[0][0]=3" modifie plusieurs éléments à la fois . Quelqu'un serait-il en mesure de l'expliquer ?

2 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     

    bonjour,

    merci de partager du texte, et pas des images, et de tenir compte de ceci quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

    cet exemple plus simple t'aidera peut-être à comprendre le comportement de ton code:

    liste=[]
    sousliste=[1]
    liste.append(sousliste)
    liste.append(sousliste)
    print("avant:",liste)
    liste[0][0]=2
    print("ensuite:",liste)
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       

      Ce que tu fais, c'est mettre deux références à sousliste dans liste.

      Ce que tu souhaites faire, c'est sans doute copier le contenu de sousliste dans liste:

      liste=[]
      sousliste=[1]
      liste.append(sousliste.copy())
      liste.append(sousliste.copy())
      print("avant:",liste)
      liste[0][0]=2
      print("ensuite:",liste)
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        liste=[]
        sousliste=[1]
        liste.append(sousliste)
        print("sousliste avant:", sousliste)
        liste[0][0]=2
        print("sousliste ensuite:", sousliste)

        En modifiant liste[0], c'est sousliste que tu modifies.

        0
  2. PierrotLeFou
     

    Ce problème revient fréquemment. Je vais tenter une explication. J'espère qu'elle sera claire. :)
    Comme l'a souligné yg_be, si on insère le même élément dans une liste comme sous-liste, c'est comme si on insérait un "pointteur" vers cette sous-liste.
    Donc, en modifiant un élément dans la sous-liste, la modification apparaît partout.
    Pour éviter ça, on peut par exemple, faire un append d'une "copie" de la sous-liste:
    liste.append(sousListe[:])

    0