Partage
  • Partager sur Facebook
  • Partager sur Twitter

[PYTHON] Problème dans la création d'une liste

Sujet résolu
    23 novembre 2010 à 15:01:02

    Bonjour,

    je suis confronté ds un programme a un bug qui m'échappe complètement.
    J'ai une classe qui contient plusieurs listes:
    class c_data:
        def __init__(self):
            self.starttime = [c_sub()]*25
            self.time      = [c_sub(), c_sub(), c_sub(), c_sub(), c_sub(), c_sub(),c_sub(), ...]
            self.linktime  = [c_sub()]
            self.linkno    = [c_sub()]
    


    Disons que ces listes vont être amené à contenir pas mal d'objets, tous du mm type. Malheureusement je ne peux pas rajouter à ces listes des éléments via append() - c'est du à la structure du soft.
    Les listes étaient auparavant allouer via la methode utilisée pour self.time --> une alloc static par "case"
    Par souci d'optimisation je l'ai remplacé par [c_sub()]*nb_delements.
    Or il semblerait que ces 2 méthodes entrainent 2 comportements différents.
    En effet lorsque j'essaie d’accéder à c_data.starttime[1] en l'ayant alloué de la manière indiquée ds le code, j'accède en réalité toujours à starttime[0]. Tandis que si je l'alloue comme j'ai alloué self.time ds le code, tout se passe bien.

    Je suis pas un expert en Python donc je fait peut être une grosse bourde. Est ce normal ou pas ? Il y a t'il un autre moyen d'allouer statiquement une liste sous python ?

    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      23 novembre 2010 à 15:09:18

      En Python, les listes sont passées par référence, et en réalité ton code alloue don starttime comme étant une liste qui contient 25 fois la même liste. Du coup, quand tu modifies un élément de starttime, ça modifie aussi tous les autres.
      Tu peux faire starttime = [c_sub() for i in xrange(25)], ça devrait marcher.
      • Partager sur Facebook
      • Partager sur Twitter
        23 novembre 2010 à 15:17:56

        Génial tu as tout à fait raison ça marche !
        J'ignorais complètement ce détail des références sous python !
        Merci beaucoup en tous cas !
        • Partager sur Facebook
        • Partager sur Twitter

        [PYTHON] Problème dans la création d'une liste

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown