copia in Python (copia profonda e copia superficiale)

| | | |

A volte è necessaria una copia in modo da poter modificare una copia senza cambiarne un`altra. Python ha due modi per fare copie:

  • Copia profonda
  • Copia superficiale

Per fare queste copie, usiamo copia modulo. Usiamo il modulo copy per operazioni di copia superficiale e profonda. Ad esempio


# import copy module

import copia


# inizializza elenco 1

li1 = [ 1 , 2 , [ 3 , 5 ], 4 ]


# usa copy per la copia superficiale

li2 = co py.copy ( li1)


# utilizzo di Deepcopy per Deepcopy

li3 < /codice> = copy.deepcopy (li1)

Nel codice sopra, copy() restituisce una copia superficiale dell`elenco e deepcopy() restituisce una copia completa dell`elenco.

deepcopy

Copia profonda — è un processo in cui il processo di copia avviene in modo ricorsivo. Ciò significa prima creare un nuovo oggetto raccolta e poi riempirlo ricorsivamente con copie degli oggetti figlio trovati nell`originale. Nel caso di una copia profonda, una copia di un oggetto viene copiata su un altro oggetto. Ciò significa che qualsiasi modifica apportata alla copia dell`oggetto non si riflette nell`oggetto originale. In Python questo viene fatto usando la funzione deepcopy() .


# Codice Python per dimostrare le operazioni di copia


# import & quot; copia & quot; per le operazioni di copia

import copia


# inizializzazione elenco 1

li1 = < codice classe = "semplice"> [ 1 , 2 , [ 3 , 5 ], 4 ]


# utilizzo di Deepcopy per la copia profonda

li2 = copy.deepcopy (li1)


# voci originali dell`elenco

print ( "Gli elementi originali prima della copia profonda" )

for i in intervallo ( 0 , len (li1)):

print (li1 [i], end < classe codice = "parola chiave"> = " " )

print ( " " )


# aggiungi e un elemento al nuovo elenco

li2 [ 2 ] [ 0 ] = 7


# La modifica si riflette in l2

print ( "Il nuovo elenco di elementi dopo la copia profonda " )

for i in intervallo ( 0 , len (li1)):

print < codice classe = "semplice"> (li2 [i], fine = "" )


stampa ( "" )


# La modifica è NON si riflette nell`elenco originale
# come una copia completa

print ( "Gli elementi originali dopo la copia profonda" )

for i in range ( 0 , len (li1)):

print (li1 [i], end = "" )

Esci:

L`elemento originale s prima della copia profonda 1 2 [3, 5] 4 Il nuovo elenco di elementi dopo la copia profonda 1 2 [7, 5] 4 Gli elementi originali dopo la copia profonda 1 2 [3, 5] 4 

In nell`esempio precedente, una modifica apportata all`elenco non ha influito sugli altri elenchi, indicando un elenco di copia profonda.

Copia superficiale

Copia superficiale significa creare un nuovo oggetto raccolta e poi popolarlo con i riferimenti agli oggetti figlio trovati nell`originale. Il processo di copia non si ripete e quindi non crea copie degli oggetti figlio stessi. Nel caso di una copia superficiale, un riferimento a un oggetto viene copiato su un altro oggetto. Ciò significa che qualsiasi modifica apportata alla copia dell`oggetto si riflette nell`oggetto originale. Python esegue questa operazione con la funzione "copy() ".


tbody>

# Codice Python per dimostrare le operazioni di copia


# importa & quot; copia & quot; per le operazioni di copia

import copia


# inizializzazione elenco 1

li1 = < codice classe = "semplice"> [ 1 , 2 , [ 3 , 5 ], 4 ]


# usa la copia per la copia superficiale

li2 = copy.copy (li1)


# voci originali dell`elenco

print ( " Gli elementi originali prima della copia superficiale " )

for i in intervallo ( 0 , len (li1)):

print (li1 [i], end = "" )


print ( "" )


# aggiungi e un elemento al nuovo elenco

li2 [ 2 ] [ 0 ] = 7


# controlla se la modifica viene applicata

print ( "Gli elementi originali dopo una copia superficiale" )

for i in range ( 0 , len (li1 )):

print (li1 [i], end = " " )

Esci:

Gli elementi originali prima della copia superficiale 1 2 [3, 5] 4 Gli elementi originali dopo la copia superficiale 1 2 [7, 5] 4 

Nell`esempio precedente, la modifica apportata all`elenco è ha avuto effetto su un altro elenco, indicando che l`elenco è stato copiato.

Punti importanti:
La differenza tra copie superficiali e profonde si applica solo agli oggetti composti (oggetti che contengono altri oggetti, come elenchi o istanze di classi):

  • La copia superficiale crea un nuovo oggetto composto e quindi (per quanto possibile) inserisce riferimenti agli oggetti trovati nell`originale.
  • Una copia profonda crea un nuovo oggetto composto e quindi inserisce ricorsivamente copie degli oggetti trovati nell`originale al suo interno.

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method