Maison > Article > développement back-end > Le découpage de liste Python crée-t-il des copies d'objets ?
Bien qu'il puisse sembler logique de supposer que le découpage de listes en Python crée des copies des objets contenus, ce n’est pas réellement le cas. Au lieu de cela, le découpage produit simplement de nouvelles listes faisant référence aux mêmes objets sous-jacents. Cette reconnaissance joue un rôle crucial dans la compréhension du mécanisme de découpage de liste de Python.
Considérez une liste d'entiers :
[1000 + 1, 1000 + 1, 1000 + 1]
Bien qu'ils aient la même valeur, ces objets sont des entités distinctes avec des identifiants uniques, comme en témoigne le suivant :
map(id, [1000 + 1, 1000 + 1, 1000 + 1])
Le découpage de cette liste maintient l'intégrité de ces références :
b = [1000 + 1, 1000 + 1, 1000 + 1][1:3] map(id, b)
Le résultat des deux opérations cartographiques est identique, confirmant que le slice ne génère pas de nouvelles copies du entiers.
Un comportement similaire est observé avec des objets mutables tels que des dictionnaires ou des listes :
a = [{0: 'zero', 1: 'one'}, ['foo', 'bar']] map(id, a[1:])
La tranche conserve toujours les références d'origine, démontrant que le découpage est une opération sans copie. .
Bien que le découpage n'implique pas la copie des objets eux-mêmes, il copie les références. Chaque référence occupe 8 octets sur les machines 64 bits, et chaque liste comporte 72 octets supplémentaires de surcharge :
for i in range(len(a)): x = a[:i] print('len: {}'.format(len(x))) print('size: {}'.format(sys.getsizeof(x)))
Néanmoins, cette surcharge n'est généralement pas une préoccupation significative pour la plupart des applications.
Bien que Python ne dispose pas d'un support direct pour vues, des options alternatives telles que les tableaux numpy peuvent être utilisées pour obtenir une optimisation de la mémoire. Le découpage des tableaux numpy crée des vues qui partagent la mémoire avec l'original, réduisant ainsi la surcharge mais introduisant un risque de modifications involontaires.
En résumé, le découpage des listes en Python préserve les références aux objets contenus, évitant ainsi des opérations de copie coûteuses. Ce mécanisme simplifie la maintenance du code en garantissant que les tranches reflètent les modifications apportées à la liste d'origine. Bien que la surcharge de mémoire soit un facteur à prendre en compte, elle ne constitue généralement pas une préoccupation majeure pour la plupart des applications pratiques.
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!