IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

duplication de liste, question toute bête


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut duplication de liste, question toute bête
    bonjour
    si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A=[1,2];B=A[:];del(A[0])
    alors B n'est pas affectée
    là je comprend
    mais si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A=[[1,2],[3,4]]
    B=A[:]
    for ligne in A:
        del(ligne[0])
    alors B est affectée et là, je ne comprend plus..

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    C'est normal, parce que B=A[:] est une astuce qui ne fait que recopier les adresses des éléments de 1er niveau, mais laisse en commun les niveaux plus profonds.

    Il existe d'autres solutions plus solides pour recopier complètement une liste de listes (=une arborescence de profondeur quelconque). Par exemple: deepcopy() du module copy:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    A=[[1,2],[3,4]]
    B=copy.deepcopy(A)
    for ligne in A:
        del(ligne[0])
    print("A:", A)
    print("B:", B)
    Ce qui affiche:

    A: [[2], [4]]
    B: [[1, 2], [3, 4]]
    On peut aussi fabriquer une fonction récursive qui fait à peu près la même chose que deepcopy:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def copieprofonde(L):
        """Retourne une copie complète de L, et convertit les tuples en listes
        """
        R = []
        for elem in L:
            if isinstance(elem, list):
                R.append(copieprofonde(elem))
            elif isinstance(elem, tuple):
                R.append(copieprofonde(list(elem)))
            else:
                R.append(elem)
        return R
    Son application donne, bien sûr, le même résultat sur les même données précédentes.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    merci bien !

Discussions similaires

  1. Réponses: 9
    Dernier message: 24/11/2007, 11h14
  2. [JButton] question toute bête
    Par Sp4ce dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 23/10/2007, 10h37
  3. Question toute bête?
    Par Martyin dans le forum Requêtes
    Réponses: 5
    Dernier message: 12/03/2007, 10h46
  4. Question toute bête sur les formulaires
    Par pekka77 dans le forum Langage
    Réponses: 5
    Dernier message: 01/12/2005, 23h45
  5. Question toute bête sur le passage de variable
    Par pekka77 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/11/2005, 12h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo