introdução

neste tutorial, vamos discutir cópias rasas vs cópias profundas com a ajuda de exemplos em Python. Vamos cobrir a definição de uma cópia profunda e superficial, juntamente com a sua implementação na linguagem Python para avaliar as diferenças fundamentais entre os dois tipos de cópias.

em muitos dos programas que escrevemos, por mais básicos que sejam, acabamos precisando copiar uma lista ou um objeto por uma de muitas razões, como a eficiência computacional., Há duas maneiras de fazer isso, ou fazer uma cópia profunda ou uma cópia superficial. Antes de discutirmos as diferenças entre os dois, vamos primeiro entender o que são cópias profundas e rasas exatamente.

cópias profundas em Python

uma cópia profunda faz uma cópia nova e separada de um objeto inteiro ou lista com seu próprio endereço de memória. O que isto significa é que quaisquer alterações que você faça na nova cópia do objeto/lista não serão refletidas na original. Este processo acontece criando uma nova lista ou objeto, seguido de copiar recursivamente os elementos do original para o novo.,

para colocá-lo brevemente, ambos os objetos são completamente independentes um do outro. Isto é semelhante ao conceito de passar pelo valor em linguagens como C++, Java e c#.

exemplo de cópia profunda

para implementar o conceito de cópias profundas em Python, estaremos usando o módulo de cópia.

digamos que temos uma lista de listas chamadas result_A, que contém notas do estudante A em 3 disciplinas para os primeiros dois anos de escola, e queremos criar uma lista exatamente semelhante de resultados para o estudante B também., Nós vamos tentar fazer uma cópia de profundidade de result_A lista, e fazer algumas alterações na cópia de profundidade, mais tarde, para mostrar as notas do aluno B.

Exemplo 1:

No script acima, nós usamos o deepcopy método copy módulo para cópia de lista result_A result_B. Em seguida, imprimimos o conteúdo de ambas as listas na tela.

saída:

, ], ]

como pode ver, as listas são idênticas. Mais tarde neste artigo veremos como isso é diferente de cópias rasas.,

cópias rasas em Python

uma cópia rasa também faz um objeto novo separado ou lista, mas em vez de copiar os elementos filhos para o novo objeto, ele simplesmente copia as referências para seus endereços de memória. Portanto, se você fizer uma mudança no objeto original, ele refletirá no objeto copiado, e vice-versa. Resumindo, ambas as cópias dependem umas das outras. Isto é semelhante ao conceito de passar por referência em linguagens de programação como C++, C# e Java.,

exemplo de cópia superficial

para implementar isto em Python, usaremos a função copymódulo novamente, mas desta vez vamos chamar a sua funçãocopy.

vamos usar a mesma lista de exemplos para o exemplo de cópia rasa também.

Exemplo 2:

# Program 2 - Shallow Copyimport copyresult_A = , ]result_B = copy.copy(result_A)print(result_A)print(result_B)

No script acima, usamos o copy método copy módulo para fazer uma cópia superficial de lista result_A qual demos o nome de result_B., Em seguida, o conteúdo de ambas as listas foram impressas no console.

saída:

, ], ]

novamente, as listas são as mesmas, como esperado. Em seguida, explicaremos a diferença entre os resultados obtidos a partir das funções copy e deepcopy.

diferença entre cópias profundas e rasas

Agora que discutimos o que são cópias rasas e profundas e porque criamos cópias, é hora de falar sobre a diferença entre elas., Basicamente, existem apenas duas diferenças essenciais e eles estão ligados uns com os outros:

  1. cópia de Profundidade armazena cópias de um objeto valores, considerando que a cópia superficial histórias referências ao original de endereço de memória
  2. cópia de Profundidade não refletir as alterações feitas para o novo/objeto copiado no objeto original; considerando que a cópia superficial não

Antes de passarmos para a implementação, Eu gostaria que você imaginar esse cenário. Digamos que duas pessoas desejam compartilhar uma bebida; eles têm dois copos vazios e duas palhinhas., Eles podem compartilhar esse beber em duas formas:

  1. Coloque a bebida em um copo e coloque os canudos em que o vidro por compartilhar
  2. Coloque a bebida em ambos os copos, e colocar uma palha em cada vidro

O primeiro cenário é o de uma cópia superficial. Ambas as variáveis / instâncias estão apontando / usando a mesma localização de memória para suas operações. O segundo cenário é o de uma cópia profunda. Ambas as variáveis / instâncias estão apontando para / usando dois locais de memória diferentes para suas operações.,

exemplo de comparação

para tornar a diferença clara, vamos usar esta informação em nossos dois exemplos acima, começando com o exemplo 1.

acima, nós criamos a listaresult_A e fizemos uma cópia profunda dela chamadaresult_B. Vamos tentar alterar o conteúdo em result_Be ver se tem algum efeito no conteúdo de result_A.

saída:

Original List:, ]Deep Copy:, ]

o resultado esperado é que a lista original permaneça inalterada., E como você pode ver, as mudanças na cópia profunda não afetaram a lista original.

agora, vamos tentar a mesma coisa com o Exemplo 2 – cópia superficial.

saída:

Original List:, ]Shallow Copy:, ]

Aqui o resultado esperado é que tanto a lista original como a lista copiada sejam modificadas após a única alteração. E como você pode ver, fazer a mudança para a cópia rasa resultou nessa mudança sendo refletida na lista original também.

conclusão

neste post, falamos sobre o que é uma cópia superficial e profunda e como podemos fazê-los em Python usando o módulo ‘copy’., Nós usamos duas de suas funções, ou seja, copyedeepcopy para fazer cópias rasas e profundas, respectivamente. Além disso, discutimos as duas diferenças principais entre uma cópia rasa e uma cópia profunda, e também implementamos cópia rasa e profunda em python para entender essas diferenças de uma forma melhor.