Maison >développement back-end >Tutoriel Python >Comment cloner correctement des listes en Python et éviter les modifications inattendues ?

Comment cloner correctement des listes en Python et éviter les modifications inattendues ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-20 22:16:16135parcourir

How to Properly Clone Lists in Python and Avoid Unexpected Modifications?

Listes clonées : préserver l'intégrité en Python

En Python, l'attribution d'une nouvelle variable à une liste existante crée une copie superficielle, vous laissant vulnérable à des modifications inattendues de la liste. Voyons pourquoi ce comportement se produit et explorons des méthodes de clonage efficaces pour garantir l'immuabilité de la liste.

Pourquoi l'affectation ne conduit pas au clonage :

Lorsque vous exécutez new_list = my_list, vous attribuez un pointeur vers le même objet de liste à new_list. Les deux variables font référence à la liste d'origine, rendant toute modification ultérieure visible à la fois dans new_list et my_list.

Copier efficacement la liste :

Pour créer un véritable clone, vous devez plusieurs approches :

1. Utilisation de list.copy() :

Cette méthode, introduite dans Python 3.3, crée une copie distincte de la liste.

**2. Découper la liste avec [:]:**

Cette syntaxe crée une nouvelle liste avec les mêmes éléments que l'original.

3. Utilisation du constructeur de liste (list()) :

Cela crée une nouvelle liste à partir d'un itérable existant, comme une autre liste.

4. Utilisation de copy.copy() :

Cette fonction intégrée fournit une copie superficielle de base, suffisante pour la plupart des cas d'utilisation.

5. Utilisation de copy.deepcopy() :

Cette méthode plus complète crée une copie complète, dans laquelle les objets imbriqués sont également clonés.

Exemple :

Comparons les résultats de ceux-ci méthodes :

import copy

my_list = ['foo', 'bar']

new_list = my_list.copy()
sliced_list = my_list[:]
list_constructor_list = list(my_list)
shallow_copy_list = copy.copy(my_list)
deep_copy_list = copy.deepcopy(my_list)

my_list.append('baz')

print(f'Original list: {my_list}')
print(f'Copied list: {new_list}')
print(f'Sliced list: {sliced_list}')
print(f'List constructed from iterator: {list_constructor_list}')
print(f'Shallow copy: {shallow_copy_list}')
print(f'Deep copy: {deep_copy_list}')

Sortie :

Original list: ['foo', 'bar', 'baz']
Copied list: ['foo', 'bar']
Sliced list: ['foo', 'bar']
List constructed from iterator: ['foo', 'bar']
Shallow copy: ['foo', 'bar']
Deep copy: ['foo', 'bar']

Comme le montre la sortie, my_list est modifiée après l'ajout de « baz », tandis que les listes clonées restent inchangées.

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