0
votes

La variable de force python à ne pas être transmise par référence

Python Dicnary est passé par référence à la liste lorsqu'il est déclaré de la portée, avec l'utilisation de A.append (b) . Par exemple, le code suivant: xxx

retour: xxx

Comment puis-je passer en copiant de manière pythonique, sans le déclarer dans la boucle? Comment forcer une variable à ne pas être une référence d'objet, sans le recréer ?


2 commentaires

Créez la dict à l'intérieur de la boucle ou simplement annoncer un littéral dict.


Les mêmes réponses que sur cette question s'appliquent ici: Pourquoi est-ce que c'est Ce générateur Python renvoyant la même valeur à chaque fois?


6 Réponses :


1
votes

Vous avez un et un seul dict, et vous continuez à écraser sa clé ID code>, créez la dicte dans la boucle

my_list = [{'id' : str(i)} for i in range(3)]


0 commentaires

0
votes

concept :

liste stocke la référence à l'objet ( my_dict ), donc chaque fois que vous modifiez quoi que ce soit à l'intérieur du my_dict être reflété dans votre liste ( my_list )

code: xxx

sortie: xxx


0 commentaires

0
votes

Voici ma solution: xxx

une manière plus courte pourrait être: xxx


0 commentaires

0
votes

Oui, les dictionnaires sont passés par référence; Tous les objets sont en python. Les latérales sont transmises par une valeur bien sûr.

Le code peut fonctionner comme prévu si vous appendez le dictionnaire directement dans la liste comme celle-ci: xxx

peut être amélioré comme @YUSEF Maali a suggéré: xxx


1 commentaires

Bonjour! Alors que ce code peut résoudre la question, , y compris une explication de la manière et pourquoi cela résout le problème aiderait vraiment à améliorer la qualité de la qualité. de votre message et aboutit probablement à plus de votes. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, pas seulement la personne qui demande maintenant. S'il vous plaît Modifier Votre réponse Pour ajouter des explications et donner une indication de quelles limitations et hypothèses s'appliquent.



0
votes

L'instance my_dict est déclarée et attribuée à l'extérieur de la boucle pour la boucle, vous devez donc ajouter à my_list la même instance du dictionnaire.

Vous devez créer Une nouvelle instance du dictionnaire pour chaque boucle: xxx

Ce code a de nombreuses possibilités d'optimisation: xxx

et la meilleure façon pythonique est la compréhension de la liste: xxx


1 commentaires

my_list = [{'id': str (i)} pour i in gamme (3)] . manquant }



0
votes
my_list = []

for i in range(0,3):

    my_dict = {} # making dictionary every time when running the loop.

    my_dict['id'] = str(i) # assigning value

    my_list.append(my_dict) #appending in list
    
my_list

0 commentaires