code Source: Lib/copy.py

les instructions D’affectation en Python ne copient pas les objets, elles créent des liens entre une cible et un objet. Pour les collections qui sont des éléments mutables ou containmutable, une copie est parfois nécessaire afin que l’on puisse changer une copie sans changer l’autre. Ce module fournit des copyoperations génériques peu profondes et profondes (expliquées ci-dessous).

l’Interface résumé:

copy.copy(x)¶

de Retour d’une copie de x.,

copy.deepcopy(x)¶

de Retour une copie en profondeur de x.

exception copy.error

Soulevées pour le module d’erreurs spécifiques.

la différence entre la copie superficielle et profonde n’est pertinente que pour les objets compoundobjects (objets qui contiennent d’autres objets, comme des listes ou des instances de classe):

  • Une copie superficielle construit un nouvel objet composé puis (dans la mesure possible) y insère des références aux objets trouvés dans l’original.,

  • Une copie profonde construit un nouvel objet composé puis, récursivement, insertscopies en elle des objets trouvés dans l’original.

deux problèmes existent souvent avec les opérations de copie profonde qui n’existent pas avec les opérations shallowcopy:

  • Les objets récursifs (objets composés qui, directement ou indirectement, contiennent areference pour eux-mêmes) peuvent provoquer une boucle récursive.

  • parce que deep copy Copie tout ce qu’il peut copier trop, comme les données qui sont destinées à être partagées entre les copies.,

la fonction deepcopy() évite ces problèmes en:

  • en conservant un memo dictionnaire des objets déjà copiés pendant la passe currentcopying; et

  • en laissant les classes définies par l’utilisateur remplacer des composants copiés.

ce module ne copie pas les types tels que module, méthode, trace de pile, cadre de pile,fichier, socket, fenêtre, tableau ou tout autre type similaire., Il « copie »les fonctions et les classes (superficielles et profondes), en renvoyant l’objet d’origine inchangé; ceci est compatible avec la façon dont ils sont traités par le module pickle.

Les Classes peuvent utiliser les mêmes interfaces pour contrôler la copie qu’elles utilisent pour controlpickling. Voir la description du module pickle pour plus d’informations sur ces méthodes. En fait, le modulecopy utilise les fonctions registeredpickle du modulecopyreg.,

pour qu’une classe définisse sa propre implémentation de copie, elle peut définir des méthodes spéciales__copy__()Et__deepcopy__(). Le premier est appelé pour implémenter l’opération de copie superficielle; aucun argument supplémentaire n’est passé.Ce dernier est appelé pour implémenter l’opération deep copy; on lui transmet uneargument ,le dictionnairememo., Si l’implémentation __deepcopy__() a besoin de faire une copie profonde d’un composant, elle doit appeler la fonction deepcopy() avec le composant comme premier argument et le dictionnaire mémo comme deuxième argument.

Voir Aussi

Module pickle

Discussion sur les méthodes spéciales utilisées pour prendre en charge la récupération d’état d’objet et la restauration.