Maison >développement back-end >Tutoriel Python >Comment puis-je éviter les modifications involontaires de listes en Python lors de la transmission de listes à des fonctions ?

Comment puis-je éviter les modifications involontaires de listes en Python lors de la transmission de listes à des fonctions ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-02 01:43:10970parcourir

How Can I Avoid Unintended List Modifications in Python When Passing Lists to Functions?

Passer des listes par valeur, pas par référence

Lorsque vous traitez des listes en Python, il est important de comprendre le concept de passage par référence, où les modifications apportées à une liste référencée par une autre variable est reflétée dans les deux variables. Cela peut conduire à un comportement inattendu, en particulier lorsque vous travaillez avec plusieurs références à la même liste.

Considérez l'exemple suivant :

a = ['help', 'copyright', 'credits', 'license']
b = a
b.append('XYZ')
print(b)  # Output: ['help', 'copyright', 'credits', 'license', 'XYZ']
print(a)  # Output: ['help', 'copyright', 'credits', 'license', 'XYZ']

Dans cet exemple, b est une référence à la même liste. comme un. Lorsque nous ajoutons « XYZ » à b, il est également ajouté à a, car les deux variables pointent vers la même liste sous-jacente. C'est ce qu'on appelle le passage par référence.

Pour éviter cela, nous devons plutôt transmettre la liste par valeur. En Python, cela peut être réalisé en créant une copie de la liste originale. Il existe plusieurs façons de procéder, mais la plus courante consiste à utiliser l'opérateur slice :

b = a[:]

Cela crée une nouvelle liste qui contient une copie des éléments de a. Toute modification apportée à b n’affectera pas a, et vice versa. Par exemple :

b.append('ABC')
print(b)  # Output: ['help', 'copyright', 'credits', 'license', 'XYZ', 'ABC']
print(a)  # Output: ['help', 'copyright', 'credits', 'license', 'XYZ']

Dans ce cas, ajouter « ABC » à b n'affecte pas a, car ils font désormais référence à des listes différentes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn