Maison > développement back-end > Tutoriel Python > Comment puis-je créer une copie immuable d'une liste en Python ?

Comment puis-je créer une copie immuable d'une liste en Python ?

Mary-Kate Olsen
Libérer: 2024-12-24 03:37:14
original
802 Les gens l'ont consulté

How Can I Create an Immutable Copy of a List in Python?

Création d'une copie de liste immuable

En Python, lors de l'attribution de références de liste comme new_list = my_list, les modifications apportées à new_list affectent étonnamment my_list. Cela se produit car au lieu de créer une nouvelle liste distincte, Python copie simplement la référence à la liste réelle, ce qui fait que new_list et my_list pointent vers la même liste.

Pour résoudre ce problème et éviter des changements inattendus, il est essentiel de créer une copie fidèle de la liste en utilisant diverses méthodes.

Cloner une liste

Pour obtenir un clone immuable ou une copie superficielle d'une liste, envisagez les options suivantes :

  • Méthode list.copy() (Python 3.3) :
new_list = old_list.copy()
Copier après la connexion
  • Liste Découpage :
new_list = old_list[:]
Copier après la connexion
  • list() Constructeur :
new_list = list(old_list)
Copier après la connexion

Copie approfondie d'une liste

Si vous devez également copier les éléments de la liste, utilisez des copie :

import copy
new_list = copy.deepcopy(old_list)
Copier après la connexion

Exemple

Considérez le code suivant :

import copy

class Foo:
    def __init__(self, val):
         self.val = val

    def __repr__(self):
        return f'Foo({self.val!r})'

foo = Foo(1)

a = ['foo', foo]
b = a.copy()
c = a[:]
d = list(a)
e = copy.copy(a)
f = copy.deepcopy(a)

# edit orignal list and instance 
a.append('baz')
foo.val = 5

print(f'original: {a}\nlist.copy(): {b}\nslice: {c}\nlist(): {d}\ncopy: {e}\ndeepcopy: {f}')
Copier après la connexion

Résultat :

original: ['foo', Foo(5), 'baz']
list.copy(): ['foo', Foo(5)]
slice: ['foo', Foo(5)]
list(): ['foo', Foo(5)]
copy: ['foo', Foo(5)]
deepcopy: ['foo', Foo(1)]
Copier après la connexion

Cela montre comment les modifications apportées à la liste d'origine et à ses instances n'affectent que la liste d'origine et non sa copie. versions (b, c, d et f).

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal