Copie d'un objet
# Copie d'un objet

La copie d'un objet est l'action, en programmation informatique, de reproduire ou copier les attributs d'un objet dans un autre objet. Un objet, le plus souvent est un type de donnée composée dans les langages de programmation orientée objet. Bien que dans les cas simples, copier un objet peut être fait en créant un nouvel objet vierge et en lui assignant tous les attributs de l'objet original, dans des situations plus complexes, cela ne mène pas toujours au résultat attendu.

## Copie de référence

### Définition

La méthode de copie de référence ou par alias est la copie la plus simple et la plus rapide, il ne s'agit pas réellement d'une copie à proprement parler car on se contente de "déclarer" un nouvel objet relié au même bloc mémoire que l'objet d'origine. Les deux objets portent des noms différents mais représentent exactement la même chose, A ⇔ B, ils ont la même référence.

Cela signifie que :

* Ajouter ou retirer un élément dans B l'ajoutera ou le retirera de A (A reste égal à B)
* Modifier la valeur d'un objet dans B issu de la copie depuis A modifiera également la valeur de cet objet dans A car il s'agit du même objet (copie en référence)

## Copie superficielle

### Définition

Une méthode de copie d'un objet est la copie superficielle aussi connue en anglais sous le nom de shallow copy.

La copie superficielle B d'un objet A est un nouvel objet ayant une référence ou adresse en mémoire différente de A. Le contenu de A est copié dans B par référence(on change le nom mais pas la référence à l'objet initial). Seul l'objet A est "réellement" copié (un nouvel objet est créé), son contenu quant à lui est seulement une copie de référence.

Cela signifie que :

* Ajouter ou retirer un élément dans B n'aura aucun impact sur A
* Modifier la valeur d'un objet dans B issu de la copie depuis A modifiera également la valeur de cet objet dans A car il s'agit du même objet (copie en référence)

A et B ne font pas référence au même bloc mémoire, modifier l'un n'a donc pas d'impact sur l'autre.

Les objets contenu dans A et B en revanche font référence chacun respectivement au même bloc mémoire que leur original car ce sont des copies de référence. Modifier un objet de B provenant de A modifiera également la valeur de l'objet dans A.

### Exemple

Soit A avec pour adresse mémoire 0x000a qui contient les objets a1, a2, a3 avec les adresses mémoire 0x0001, 0x0002, 0x0003.

Une copie superficielle de A dans B donnerait un nouvel objet B avec une adresse mémoire 0x000b (différente de A) qui contiendra les objets b1, b2, b3 ayant pour adresses mémoire 0x0001, 0x0002, 0x0003 (les mêmes que a1, a2, a3).

