copiar para Python (cópia profunda e cópia superficial)

| | | |

Às vezes, é necessária uma cópia para que você possa alterar uma cópia sem alterar a outra. Python tem duas maneiras de fazer cópias:

  • Deep copy
  • Shallow copy

Para fazer essas cópias, usamos copie o módulo . Usamos o módulo copy para operações de cópia superficial e profunda. Por exemplo


# import copy module

import copiar


# inicializar lista 1

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


# use copy para cópia superficial

li2 = co py.copy ( li1)


# usando Deepcopy para Deepcopy

li3 = copy.deepcopy (li1)

No código acima, copy() retorna uma cópia superficial da lista e deepcopy() retorna uma cópia profunda da lista.

deepcopy

Deep Copy — é um processo em que o processo de cópia ocorre de forma recursiva. Isso significa primeiro criar um novo objeto de coleção e depois preenchê-lo recursivamente com cópias dos objetos filho encontrados no original. No caso de uma cópia profunda, uma cópia de um objeto é copiada para outro objeto. Isso significa que quaisquer alterações feitas na cópia do objeto não são refletidas no objeto original. Em python isso é feito usando a função deepcopy() .


# Código Python para demonstrar operações de cópia


code>


# import & quot; copie " para operações de cópia

importar copiar


# inicializando a lista 1

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


# usando Deepcopy para deep copy

li2 = copy.deepcopy (li1)


# itens da lista original

print ( "Os elementos originais antes da cópia profunda" )

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

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

print ( " " )


# adicionar um item à nova lista

li2 [ 2 ] [ 0 ] = 7


# A alteração é refletida em l2

print ( "A nova lista de elementos após a cópia profunda " )

para i em intervalo ( 0 , len (li1)):

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


imprimir ( "" )


# A mudança é NÃO refletido na lista original
# como uma cópia profunda

print ( "Os elementos originais após a cópia profunda" )

para i em intervalo ( 0 , len (li1)):

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

Sair:

O elemento original s antes da cópia profunda 1 2 [3, 5] 4 A nova lista de elementos após a cópia profunda 1 2 [7, 5] 4 Os elementos originais após a cópia profunda 1 2 [3, 5] 4 

Em No exemplo acima, uma alteração feita na lista não afetou outras listas, indicando uma lista de cópia profunda.

Cópia superficial

Cópia rasa significa criar um novo objeto de coleção e preenchê-lo com referências a objetos filho encontrados no original. O processo de cópia não se repete e, portanto, não cria cópias dos próprios objetos filho. No caso de uma cópia superficial, uma referência a um objeto é copiada para outro objeto. Isso significa que quaisquer alterações feitas na cópia do objeto são refletidas no objeto original. Python faz isso com a função "copy() ".


# código Python para demonstrar operações de cópia


# importação & quot; copie " para operações de cópia

importar copiar


# inicializando a lista 1

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


# use cópia para cópia superficial

li2 = copy.copy (li1)


# itens da lista original

print ( " Os elementos originais antes da cópia superficial " )

para i em intervalo ( 0 , len (li1)):

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


print ( "" )


# adiciona um item à nova lista

li2 [ 2 ] [ 0 ] = 7


# verifica se a alteração é refletida

print ( "Os elementos originais após a cópia superficial" )

for i em intervalo ( 0 , len (li1 )):

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

Sair:

Os elementos originais antes da cópia superficial 1 2 [3, 5] 4 Os elementos originais após a cópia superficial 1 2 [7, 5] 4 

No exemplo acima, a alteração feita na lista é > entrou em vigor em outra lista, indicando que a lista foi copiada.

Pontos importantes:
A diferença entre cópias superficiais e profundas só se aplica a objetos compostos (objetos que contêm outros objetos, como listas ou instâncias de classe):

  • A cópia superficial cria um novo objeto composto e então (na medida do possível) insere referências aos objetos encontrados no original.
  • Uma cópia profunda cria um novo objeto composto e, em seguida, insere recursivamente cópias dos objetos encontrados no original nele.