Maison >développement back-end >Tutoriel Python >Le découpage de liste Python crée-t-il des copies ou des références ?

Le découpage de liste Python crée-t-il des copies ou des références ?

DDD
DDDoriginal
2024-11-08 14:32:02867parcourir

Does Python List Slicing Create Copies or References?

Découpage de liste partielle sans copie en Python

L'opération de découpage de liste de Python génère des références aux éléments de la liste d'origine, plutôt que de créer des copies. Ce comportement provient du fait que le découpage préserve les identités d'objet des éléments de la liste.

Démonstration

Pour illustrer cela, considérons la liste suivante :

<code class="python">L = [1000 + 1, 1000 + 1, 1000 + 1]</code>

Même si ces entiers ont la même valeur, ce sont des objets distincts :

<code class="python">map(id, L)
[140502922988976, 140502922988952, 140502922988928]</code>

Découper la liste copie simplement les références :

<code class="python">b = L[1:3]
map(id, b)
[140502922988952, 140502922988928]</code>

Mémoire Frais généraux du découpage

Bien que le découpage ne crée pas de copies d'objets, il implique la copie de références. Ces références s'ajoutent à la surcharge globale de mémoire associée aux listes :

<code class="python">for i in range(len(L)):
    x = L[:i]
    print('len: {}'.format(len(x)))
    print('size: {}'.format(sys.getsizeof(x)))</code>

Cette surcharge peut s'accumuler, en particulier lorsque vous travaillez avec des objets gourmands en mémoire, comme de grandes listes ou des dictionnaires.

Alternative : Vues

Python ne dispose pas d'un moyen simple pour créer des vues ou des alias de listes. Cependant, les tableaux NumPy offrent cette fonctionnalité. Le découpage d'un tableau NumPy crée une vue qui partage la mémoire avec le tableau d'origine. Cela peut économiser une mémoire importante mais introduit des pièges potentiels lors de la modification d'objets.

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