Introduction

Dans ce tutoriel, nous allons discuter peu profondes des copies vs profonde des copies à l’aide d’exemples en Python. Nous couvrirons la définition d’une copie profonde et superficielle, ainsi que son implémentation dans le langage Python pour évaluer les différences fondamentales entre les deux types de copies.

dans la plupart des programmes que nous écrivons, peu importe à quel point ils sont basiques, nous finissons par avoir besoin de copier une liste ou un objet pour l’une des nombreuses raisons, comme l’efficacité informatique., Il y a deux façons de le faire, soit faire une copie ou une copie superficielle. Avant de discuter des différences entre les deux, comprenons d’abord ce que sont exactement les copies profondes et peu profondes.

copies profondes en Python

Une copie profonde fait une nouvelle copie séparée d’un objet ou d’une liste entière avec sa propre adresse mémoire unique. Cela signifie que toutes les modifications que vous apportez à la nouvelle copie de l’objet/liste ne seront pas reflétées dans celle d’origine. Ce processus se produit en créant d’abord une nouvelle liste ou un nouvel objet, puis en copiant récursivement les éléments de l’original vers le nouveau.,

Pour le dire brièvement, les deux objets sont complètement indépendants les uns des autres. Ceci est similaire au concept de passage par valeur dans des langages comme C++, Java et C#.

exemple de copie profonde

pour implémenter le concept de copie profonde En Python, nous allons utiliser le module copy.

disons que nous avons une liste de listes appeléeresult_A, qui contient les notes de l’élève A dans 3 matières pour les deux premières années d’école, et nous souhaitons créer une liste exactement similaire de résultats pour l’élève B également., Nous allons essayer de faire une copie profonde de la liste result_A, et apporter quelques modifications à cette copie profonde plus tard pour afficher les notes de l’étudiant B.

exemple 1:

dans le script ci-dessus, nous utilisons la méthode deepcopy de la copy module pour copier la liste result_A vers result_B. Ensuite, nous imprimons le contenu des deux listes à l’écran.

Résultat:

, ], ]

Comme vous pouvez le voir, les listes sont identiques. Plus tard dans cet article, nous verrons en quoi cela est différent des copies peu profondes.,

Copies superficielles en Python

Une copie superficielle crée également un nouvel objet ou une liste distincte, mais au lieu de copier les éléments enfants dans le nouvel objet, elle copie simplement les références à leurs adresses mémoire. Par conséquent, si vous apportez une modification à l’objet d’origine, elle se reflétera dans l’objet copié, et vice versa. Pour le dire brièvement, les deux copies dépendent l’une de l’autre. Ceci est similaire au concept de passage par référence dans les langages de programmation comme C++, C# et Java.,

exemple de copie superficielle

pour implémenter cela en Python, nous utiliserons à nouveau le modulecopy, mais cette fois, nous appellerons sa fonctioncopy.

utilisons également la même Liste d’exemples pour l’exemple de copie superficielle.

Exemple 2:

# Program 2 - Shallow Copyimport copyresult_A = , ]result_B = copy.copy(result_A)print(result_A)print(result_B)

Dans le script ci-dessus, nous utilisons la balise copy méthode de la balise copy module pour faire une copie de la liste result_A que nous avons nommée result_B., Ensuite, le contenu des deux listes a été imprimé sur la console.

Résultat:

, ], ]

Encore une fois, les listes sont les mêmes, comme prévu. Ensuite, nous expliquerons la différence entre les résultats que nous obtenons des fonctions copy et deepcopy.

différence entre les Copies profondes et superficielles

maintenant que nous avons discuté de ce que sont les copies profondes et profondes et pourquoi nous créons des copies, il est temps de parler de la différence entre elles., Essentiellement, il n’y a que deux différences fondamentales et elles sont liées les unes aux autres:

  1. Deep copy stocke les copies des valeurs d’un objet, tandis que shallow copy stories fait référence à l’adresse mémoire d’origine
  2. Deep copy ne reflète pas les modifications apportées au nouvel objet/copié dans l’objet original; alors que shallow copy fait

avant de passer à l’implémentation, j’aimerais que vous imaginiez ce scénario. Disons que deux personnes souhaitent partager un verre; ils ont deux verres vides et deux pailles., Ils peuvent partager cette boisson de deux façons:

  1. Mettez la boisson dans un verre, et de placer la paille dans le verre pour le partage
  2. Mettre le verre dans les deux verres, et de mettre une paille dans chaque verre

Le premier scénario est celui d’une copie superficielle. Les deux variables / instances pointent / utilisent le même emplacement de mémoire pour leurs opérations. Le deuxième scénario est celui d’une copie profonde. Les deux variables / instances pointent vers / utilisent deux emplacements de mémoire différents pour leurs opérations.,

exemple de comparaison

pour clarifier la différence, utilisons ces informations dans nos deux exemples ci-dessus, en commençant par L’exemple 1.

ci-Dessus, nous avons créé la liste result_A et fait une profonde copie de celui-ci, nommé result_B. Essayons de changer le contenu dans result_B et voyons si cela a un effet sur le contenu de result_A.

Résultat:

Original List:, ]Deep Copy:, ]

Le résultat attendu est que la liste d’origine reste inchangé., Et comme vous pouvez le voir, les changements dans la copie profonde n’ont pas affecté la liste d’origine.

maintenant, essayons la même chose avec L’exemple 2 – copie superficielle.

sortie:

Original List:, ]Shallow Copy:, ]

ici, le résultat attendu est que la liste d’origine et la liste copiée sont modifiées après le seul changement. Et comme vous pouvez le voir, la modification de la copie superficielle a également entraîné cette modification dans la liste d’origine.

Conclusion

dans cet article, nous avons parlé de ce qu’est une copie superficielle et profonde et comment nous pouvons les faire en langage Python en utilisant le module ‘copy’., Nous avons utilisé deux de ses fonctions à savoir copy Et deepcopy pour faire des copies peu profondes et profondes, respectivement. De plus, nous avons discuté des deux principales différences entre une copie superficielle et une copie profonde, et avons également implémenté une copie superficielle et profonde en python pour mieux comprendre ces différences.