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 :

Modification liste involontaire [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 2
    Par défaut Modification liste involontaire
    Bonjour,

    J'ai un petit problème sur un projet de résolution du jeu du taquin étant débutant.

    Voici ma fonction "invert" qui me permet d'inverser 2 cases, a_table est une liste de liste, cell1 et cell2 des listes de longueur 2 (coordonées)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def invert(a_table,cell1,cell2):
        table=a_table
        mem=table[cell1[0]][cell1[1]]
        table[cell1[0]][cell1[1]]=table[cell2[0]][cell2[1]]
        table[cell2[0]][cell2[1]]=mem
        return(table)
    Le problème est que lorsque je fais intervenir cette fonction, elle me renvoie bien la bonne liste avec les bonnes cases inversées, mais modifie aussi la liste mise en entrée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    print(table)
     
    new_table=invert(table,cell1,cell2)
     
    print(table)
    Ici les 2 prints ne renvoient pas le même résultat avec table devenu égal à new_table.

    Quand j'insère des prints dans "invert", a_table se modifie en même temps que table. Je ne vois pas pourquoi et de plus en quoi cela influe sur mon argument d'entrée en dehors de la fonction "invert", je pensais que ce qui se passait dans une fonction était délimité à cette fonction.

    A quoi cela est dû, où est mon erreur?, comment remédier à cela?

    Merci beaucoup,

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Ici table et a_table pointe sur le même élément (Python ne réalise pas de copie sur les assignations d'objet, une liste étant un objet).
    Tu crois avoir deux objets distincts mais en fait ils sont liés. Si tu veux forcer une copie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import copy
    table=copy.deepcopy(a_table)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 2
    Par défaut
    C'est parfait merci beaucoup!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/11/2011, 17h14
  2. [XL-2007] modification liste déroulante
    Par picsou59 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/06/2009, 10h07
  3. modification liste en cours exécution
    Par senshi03 dans le forum Langage
    Réponses: 9
    Dernier message: 28/04/2009, 16h06
  4. Recherche + Modification liste
    Par jinjung dans le forum Langage
    Réponses: 5
    Dernier message: 07/12/2006, 15h30
  5. Modification liste deroulante avec GTK
    Par le_sonic dans le forum GTK+ avec C & C++
    Réponses: 15
    Dernier message: 04/08/2006, 00h48

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