Maison >développement back-end >Golang >Go Slices : ajouter ou copier pour une copie approfondie – Quel est le plus efficace ?

Go Slices : ajouter ou copier pour une copie approfondie – Quel est le plus efficace ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-10 21:00:15596parcourir

Go Slices:  Append vs. Copy for Deep Copying – Which is More Efficient?

Copie approfondie efficace des tranches

Dans Go, la création d'une copie approfondie d'une tranche implique la réplication de son contenu dans un emplacement mémoire distinct. Cela garantit que toute modification apportée à une tranche n'affecte pas l'autre.

Une approche de la copie approfondie consiste à utiliser la fonction d'ajout :

copy := append([]T{}, orig...)

Ici, l'origine de la tranche d'origine est ajoutée à une tranche vide, créant une nouvelle copie de tranche avec son propre tableau de support.

Une méthode alternative utilise la copie intégrée function :

cpy := make([]T, len(orig))
copy(cpy, orig)

Cette approche copie directement les éléments de orig vers une tranche cpy nouvellement créée.

Les deux solutions copient efficacement les valeurs dans la tranche. Cependant, il est important de noter que si la tranche contient des pointeurs ou des structures avec des champs de pointeur, ces valeurs de pointeur feront toujours référence aux mêmes emplacements que dans la tranche d'origine.

L'analyse comparative des deux méthodes donne des performances comparables :

BenchmarkCopy     100000         24724 ns/op
BenchmarkAppend   100000         24967 ns/op

Le code assembleur révèle que l'ajout et la copie effectuent probablement un remplissage à zéro de la mémoire dans le cadre de leur opérations.

En fin de compte, le choix entre les méthodes d’ajout et de copie dépend des préférences individuelles et des considérations de performances. Cependant, les deux approches copient efficacement les tranches en profondeur, garantissant l'intégrité des données lorsque vous travaillez avec des instances distinctes de données de tranche.

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