Copia di un oggetto
# Copia di un oggetto

La Copia di un oggetto è l'azione, in programmazione informatica, dove un oggetto ha i suoi attributi copiati in un altro oggetto dello stesso tipo di dato. Un oggetto è un tipo di dato composito nei linguaggi di programmazione a oggetti. La copia dei dati è una delle più comuni procedure che ricorrono nei programmi per computer. Un oggetto può essere copiato per riutilizzare tutti o parte dei suoi dati in un nuovo contesto.

## Copia per indirizzo o Shallow copy

In questo processo, B è allegato allo stesso blocco di memoria di A. Questo metodo è conosciuto anche come copia per indirizzo.

Questo accade in una situazione in cui gli stessi dati sono condivisi tra A e B, così modificando il primo verrà alterato l'altro. Il blocco di memoria originale di B ora non fa più riferimento a nulla.

Se il linguaggio di programmazione non ha un garbage collector, il blocco originale di memoria di B è probabilmente in memory leak.

Il vantaggio della copia per indirizzo è la sua velocità d'esecuzione è rapida e non dipende dalla grandezza del dato.

Le copie bitwise di oggetti che non son composti da blocchi monolitici sono copie per indirizzo.

## Copia in profondità o Deep copy

La Deep Copy consiste in una reale copia dell'oggetto. Il vantaggio è che A e B non dipendono fra di loro ma c'è un alto costo in termini di velocità.

## Copia pigra o Lazy copy

La copia pigra è una combinazione di entrambe le strategie precedenti. Quando inizialmente copia un oggetto viene usata la copia per indirizzo. Un contatore A è usato per tracciare quanti oggetti condividono il dato. Quando il programma vuole modificare l'oggetto, può determinare se il dato è condiviso (esaminando il contatore) e può fare una deep copy se necessario.

La Lazy copy sembra una Deep Copy, ma ha anche i vantaggi di velocità della copia per indirizzo quando è possibile. In alcuni situazioni di riferimenti circolari può causare problemi.

La Lazy copy è correlata alla copy-on-write.

