Maison  >  Article  >  développement back-end  >  Le découpage d'une liste en Python crée-t-il des copies des objets sous-jacents ?

Le découpage d'une liste en Python crée-t-il des copies des objets sous-jacents ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-08 14:55:021074parcourir

Does Slicing a List in Python Create Copies of the Underlying Objects?

Découper une liste sans générer de copie en Python

Le problème :
Étant donné une liste d'entiers, générez toutes les sous-listes du former L[k:] pour k dans [0, len(L)-1] efficacement sans créer copies.

La réponse :
Découper une liste en Python ne génère pas de copies des objets sous-jacents, seulement des références à ceux-ci.

Comprendre la copie de référence

Pour démontrer cela, considérons trois objets entiers avec la même valeur :

a = [1000 + 1, 1000 + 1, 1000 + 1]

Ils ont un objet distinct ID, indiquant qu'il s'agit d'objets distincts :

map(id, a)  # returns [140502922988976, 140502922988952, 140502922988928]

Le découpage de ces objets entraîne de nouveaux objets de liste avec les mêmes références, montrant qu'aucun nouvel objet n'a été créé :

b = a[1:3]
map(id, b)  # returns [140502922988952, 140502922988928]

Ceci le comportement s'applique à la fois aux valeurs immuables (par exemple, les entiers) et mutables (par exemple, les listes).

Overhead Considérations

Bien que le découpage ne génère pas de nouveaux objets, il entraîne une certaine surcharge de mémoire en raison de la copie des références et de la maintenance des métadonnées de la liste. Par exemple, une liste avec N éléments a une surcharge de mémoire de 72 octets.

Vues et tableaux numpy

Si l'optimisation de la mémoire est cruciale, envisagez d'utiliser des tableaux numpy au lieu de listes, comme découpage de tableaux numpy partage la mémoire entre la tranche et le tableau d'origine. Cependant, cette approche nécessite une manipulation prudente pour éviter des modifications involontaires.

Conclusion

Le découpage de listes en Python est une opération efficace qui ne génère pas de copies des objets sous-jacents. Ce comportement doit être pris en compte lors de l'examen des optimisations de performances.

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