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

Calcul scientifique Python Discussion :

Problème dictionnaire python


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2023
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2023
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème dictionnaire python
    Bonjour,
    j'ai un problème lorsque je crée un dictionnaire en associant la même liste à deux clés différentes : lorsque je veux modifier la valeur d'une seule clé, celle de l'autre change aussi comme si elles étaient "liées". Est ce que c'est possible d'empêcher cela, de les dissocier ?

    Un exemple de mon problème :Nom : Capture d’écran 2023-01-29 195032.png
Affichages : 139
Taille : 10,7 Ko

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Prenons un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    liste = [1,2,3]
     
    a = liste
     
    b = liste
    En faisant comme ça, la variable liste est affectée à a et à b non pas par sa valeur mais par son adresse. Toute modification de a ou de b sera donc aussi affectée à l'autre variable (ainsi d'ailleurs à la variable liste elle-même!).

    Pour sortir de ça, il faut transmettre la valeur de liste à a et à b comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a = liste[:]
     
    b = liste[:]
    Ainsi, les modifications de a ou de b ne changeront pas la valeur de l'autre variable. Ni d'ailleurs les modifications de la variable liste.
    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

  4. #4
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Citation Envoyé par tyrtamos Voir le message
    Ainsi, les modifications de a ou de b ne changeront pas la valeur de l'autre variable. Ni d'ailleurs les modifications de la variable liste.
    Sauf dans le cas où la liste contient un objet mutable. Auquel cas il faudra utiliser une deepcopy.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import copy
    liste_copiée = copy.deepcopy(liste)
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  5. #5
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Au cas où:
    @brocket: Une deepcopy s'applique aussi sur un dico...
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  6. #6
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Citation Envoyé par Hominidé Voir le message
    Sauf dans le cas où la liste contient un objet mutable. Auquel cas il faudra utiliser une deepcopy.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import copy
    liste_copiée = copy.deepcopy(liste)
    Très juste! La solution avec deepcopy est plus générale.
    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

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par brocket Voir le message
    lorsque je veux modifier la valeur d'une seule clé, celle de l'autre change aussi comme si elles étaient "liées".
    C'est un comportement normal sous Python (et il doit probablement être le même dans tous les langages qui manipulent des objets "complexes").
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [Python 3.X] Problème de tri sur un dictionnaire PYTHON
    Par tom31 dans le forum Général Python
    Réponses: 5
    Dernier message: 15/07/2020, 14h24
  2. Installer Omni : Problème avec Python
    Par Colbix dans le forum CORBA
    Réponses: 1
    Dernier message: 18/02/2009, 14h30
  3. [turbogears] problème avec python 2.5
    Par gorgonite dans le forum Général Python
    Réponses: 1
    Dernier message: 23/05/2007, 17h48
  4. [Linux-XML] Probléme avec python-xml
    Par Exodus dans le forum Général Python
    Réponses: 5
    Dernier message: 27/03/2007, 15h47
  5. Problème avec python
    Par Thrystan dans le forum Gnome
    Réponses: 2
    Dernier message: 17/08/2006, 00h29

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