Copiar objeto Python
Em Python, as instruções de atribuição não têm o poder de copiar objetos, mas apenas gerar uma nova variável que compartilha a referência do objeto original.
A cópia é muito útil na programação e é principalmente necessária para editar o código de uma cópia sem danificar a outra.
Este tutorial discutirá diferentes métodos para copiar um objeto em Python.
Use Shallow Copy para copiar um objeto em Python
O módulo copy
precisa ser importado para usar a operação de cópia superficial. O módulo copy
fornece aos programadores a capacidade de usar operações genéricas de cópia profundas e superficiais.
Uma cópia superficial basicamente cria um novo objeto de coleta que armazena as referências dos objetos filhos encontrados nos elementos originais. Este processo não é recursivo e, portanto, não cria nenhuma cópia dos objetos filho.
Quando ocorre uma operação de cópia superficial, uma referência é copiada para o novo objeto. Isso significa que se qualquer alteração for feita na cópia do objeto, essas alterações também serão refletidas no objeto original.
O código a seguir usa a operação Shallow copy
para copiar um objeto em Python.
import copy
# the original list
ol = [2, 4, [1, 8], 6, 8]
# using copy to shallow copy
nl = copy.copy(ol)
print("Original list before shallow copy")
for x in range(0, len(ol)):
print(ol[x], end=" ")
print("\r")
# modfying the new list
nl[2][0] = 9
print("Original list after shallow copy")
for x in range(0, len(ol)):
print(ol[x], end=" ")
Resultado:
Original list before shallow copy
2 4 [1, 8] 6 8
Original list after shallow copy
2 4 [9, 8] 6 8
Conforme mencionado anteriormente, nenhuma cópia do processo filho é criada nesta operação. Portanto, pode-se dizer que a cópia superficial não é totalmente autossuficiente e depende do objeto original.
Use Deep Copy para copiar um objeto em Python
Precisamos importar o módulo copy
para o código Python para usar as operações de cópia profunda e superficial.
Na operação de cópia profunda, o processo de cópia sempre ocorre recursivamente. A operação de cópia profunda primeiro cria um novo objeto de coleta e, em seguida, adiciona cópias dos objetos filho encontrados nos elementos originais.
Basicamente, no processo de cópia profunda
, uma cópia do objeto original é passada para o novo objeto de coleta. Portanto, se qualquer alteração for feita na cópia do objeto, essas alterações não serão refletidas no objeto original. Para implementar essa operação de cópia profunda, usamos a função deep copy
.
O código a seguir usa a função deepcopy()
para implementar a operação de cópia profunda em Python.
import copy
# original list
ol = [2, 4, [1, 8], 6, 8]
# use deepcopy() to deep copy
nl = copy.deepcopy(ol)
# original elements of list
print("Original list before deep copying")
for x in range(0, len(ol)):
print(ol[x], end=" ")
print("\r")
# adding and element to new list
nl[2][0] = 9
# The second list after changes
print("The new list after modifications ")
for x in range(0, len(ol)):
print(nl[x], end=" ")
print("\r")
print("Original list after deep copying")
for x in range(0, len(ol)):
print(ol[x], end=" ")
Resultado:
Original list before deep copying
2 4 [1, 8] 6 8
The new list after modifications
2 4 [9, 8] 6 8
Original list after deep copying
2 4 [1, 8] 6 8
Conforme ditado nas frases acima, uma cópia profunda pode clonar os objetos filho recursivamente, o que significa que é autossuficiente e não depende do objeto original.
A única desvantagem de criar uma operação de cópia profunda é que ela é comparativamente mais lenta e leva mais tempo para ser realizada do que uma operação de cópia superficial.
Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.
LinkedIn