Copiar objeto Python

Vaibhhav Khetarpal 11 julho 2021
  1. Use Shallow Copy para copiar um objeto em Python
  2. Use Deep Copy para copiar um objeto em Python
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 Khetarpal avatar Vaibhhav Khetarpal avatar

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

Artigo relacionado - Python Object