Python est un langage de programmation interprété de haut niveau largement utilisé dans le développement de diverses applications. Il fournit des fonctionnalités riches, notamment un système de type dynamique, une gestion de la mémoire et des structures de données intégrées. L’une des principales fonctionnalités de Python est sa capacité à copier des objets.
La copie d’objets en Python est une tâche courante que les développeurs doivent effectuer lorsqu’ils travaillent sur leurs applications. Il existe deux types d’opérations de copie pouvant être effectuées sur des objets en Python : la copie superficielle et la copie approfondie.
Dans cet article, nous explorerons à la fois la copie superficielle et profonde en Python et discuterons de la façon de copier des objets à l’aide de différentes techniques.
Copie superficielle
La copie superficielle crée un nouvel objet, qui est une copie de l’objet d’origine, mais le nouvel objet contient des références au même emplacement mémoire que l’objet d’origine. En d’autres termes, les modifications apportées à l’objet d’origine affecteront également la copie.
En Python, nous pouvons effectuer une copie superficielle en utilisant le copy
méthode, qui est fournie par la fonction intégrée copy
module.
import copy
original_list = [1, 2, 3, [4, 5]]
copy_list = copy.copy(original_list)
print("Original List: ", original_list)
print("Copy List: ", copy_list)
Sortir:
Original List: [1, 2, 3, [4, 5]]
Copy List: [1, 2, 3, [4, 5]]
Dans l’exemple ci-dessus, nous avons créé une liste original_list
contenant quatre éléments. Nous effectuons ensuite une copie superficielle de la liste en utilisant le copy
méthode et stocker le résultat dans copy_list
. La sortie montre que les deux original_list
et copy_list
contiennent les mêmes éléments.
Si nous modifions un élément dans, le même changement sera également reflété dans copy_list
.
original_list[3].append(6)
print("Original List: ", original_list)
print("Copy List: ", copy_list)
Sortir:
Original List: [1, 2, 3, [4, 5, 6]]
Copy List: [1, 2, 3, [4, 5, 6]]
Comme nous pouvons le voir sur la sortie, la modification apportée à original_list
affecte également copy_list
.
La copie superficielle peut être utile lorsque nous voulons créer un nouvel objet qui partage certaines données avec l’objet d’origine. Cependant, si nous voulons créer un objet complètement nouveau sans aucune référence à l’objet d’origine, nous devons effectuer une copie complète.
Copie en profondeur
La copie en profondeur crée un nouvel objet qui est une copie complète de l’objet d’origine, y compris toutes ses données et les données de tous ses objets imbriqués. En d’autres termes, les modifications apportées à l’objet d’origine n’affecteront pas la copie.
En Python, nous pouvons effectuer une copie profonde en utilisant le deepcopy
méthode, qui est également fournie par le copy
module.
import copy
original_list = [1, 2, 3, [4, 5]]
deep_copy_list = copy.deepcopy(original_list)
print("Original List: ", original_list)
print("Deep Copy List: ", deep_copy_list)
Dans l’exemple ci-dessus, nous avons créé une liste original_list
contenant quatre éléments. Nous effectuons ensuite une copie complète de la liste à l’aide de la deepcopy
méthode et stocker le résultat dans deep_copy_list
. La sortie montre que les deux original_list.
Quelle est la différence entre une copie superficielle et une copie approfondie ?
Voici un tableau résumant les différences entre la copie superficielle et la copie profonde en Python :
Copie superficielle | Copie en profondeur |
---|---|
Crée un nouvel objet qui est une copie de l’objet d’origine, mais le nouvel objet contient des références au même emplacement mémoire que l’objet d’origine. | Crée un nouvel objet qui est une copie complète de l’objet d’origine, y compris toutes ses données et les données de tous ses objets imbriqués. |
Les modifications apportées à l’objet d’origine affecteront également la copie. | Les modifications apportées à l’objet d’origine n’affecteront pas la copie. |
Peut être effectué à l’aide de la copy méthode proposée par le copy module. |
Peut être effectué à l’aide de la deepcopy méthode fournie par le module de copie. |
Une copie superficielle est plus rapide qu’une copie profonde. | La copie profonde est plus lente que la copie superficielle. |
Une copie superficielle est utile lorsque nous voulons créer un nouvel objet qui partage certaines données avec l’objet d’origine. | La copie en profondeur est utile lorsque nous voulons créer un objet complètement nouveau sans aucune référence à l’objet d’origine. |
Conclusion
En conclusion, la copie d’objets en Python est une tâche essentielle que les développeurs doivent fréquemment effectuer lorsqu’ils travaillent sur leurs applications. Python propose deux types d’opérations de copie : la copie superficielle et la copie approfondie.
Il est essentiel de choisir le bon type d’opération de copie en fonction des exigences spécifiques de votre application. La copie superficielle est plus rapide que la copie complète, mais elle n’est utile que lorsque vous souhaitez créer un nouvel objet qui partage certaines données avec l’objet d’origine. Si vous souhaitez créer un objet entièrement nouveau sans aucune référence à l’objet d’origine, vous devez utiliser la copie en profondeur.