Thanks to visit codestin.com
Credit goes to www.datacamp.com

Pular para o conteúdo principal

Python Copy List: O que você deve saber

Entenda como copiar listas em Python. Saiba como usar as funções copy() e list(). Descubra a diferença entre cópias superficiais e profundas.
Atualizado 13 de ago. de 2024  · 7 min lido

As listas do Python são estruturas de dados poderosas usadas para armazenar uma coleção de itens. O método de lista de cópia é importante ao lidar com dados, pois ajuda a preservar a lista original enquanto você executa operações na lista duplicada. Neste tutorial, explicarei as técnicas básicas e avançadas de cópia de listas com exemplos práticos.

Antes de explorar os diferentes exemplos, recomendo que você faça o curso Introdução ao Python da DataCamp para aprender os conceitos básicos do Python, incluindo as diferentes estruturas de dados do Python. A Python Cheat Sheet for Beginners também será útil para que você possa fazer referência a diferentes funções e métodos.

Python usando uma copiadora

"Python usando uma copiadora." Imagem de Dall-E.

Resposta rápida: Como copiar uma lista em Python

O exemplo abaixo mostra como você pode copiar uma lista em Python usando o método copy(). Observe como a lista original permanece inalterada, mesmo que sejam feitas alterações na lista duplicada. O código imprimirá [1, 2, 3].

# Define the original list
original_list = [1, 2, 3]

# Create a shallow copy of the original list
copied_list = original_list.copy()

# Modify the first element of the copied list
copied_list[0] = 99

print(original_list)
[1, 2, 3]

Mais técnicas para copiar uma lista em Python

Antes de examinarmos as diferentes técnicas para copiar uma lista em Python, vamos considerar por que não usamos o operador de atribuição =. Não usamos o site = porque, ao fazer isso, você não criaria uma cópia da nossa lista. O operador de atribuição criaria apenas uma referência à nossa lista. 

No exemplo a seguir, original_list e reference_to_original_list referem-se à mesma lista após nossa atribuição.

# Create a list called original_list
original_list = [1, 2, 3]

# Create a new reference copied_list that points to the same list as original_list
reference_to_original_list = original_list

Aqui, qualquer modificação na lista duplicada afetará a lista original e vice-versa. Essas alterações ocorrem porque as duas listas estão armazenadas na mesma memória. Agora, vamos dar uma olhada nas diferentes maneiras de realmente copiar nossa lista. 

Usando o método copy()

O método copy() é um método interno usado para criar uma cópia superficial da lista. O método copy() está disponível a partir do Python 3.3. Esse método copia apenas a estrutura da lista de nível superior. A sintaxe do método copy() é mostrada abaixo.

new_list = original_list.copy()

No exemplo a seguir, o código imprimirá [1, 2, 3, 4].

# Original list with nested structure
original_list = [1, 2, 3, 4]

# Create a shallow copy using the copy() method
shallow_copied_list = original_list.copy()

print(shallow_copied_list)
[1, 2, 3, 4]

Usando o construtor list()

O construtor list() é usado para criar uma nova lista a partir de uma lista existente para incluir todos os elementos da lista original. Essa técnica é importante ao criar um novo objeto de lista em que as alterações na lista copiada não afetarão a lista original. O código a seguir imprime [1, 2, 3].

# Create a list called original_list
original_list = [1, 2, 3]

# Create a shallow copy of original_list using the list() function
copied_list = list(original_list)

# Modify the first element of copied_list
copied_list[0] = 99

print(original_list)
[1, 2, 3]

Usando o fatiamento de lista com [:]

Fatiamento de lista [:] oferece um método conciso de criar uma cópia superficial de uma lista. O método de fatiamento de lista [:] é eficiente, pois é implementado em um nível baixo no Python. Abaixo está a sintaxe desse método. 

new_list = original_list[:]

O código a seguir imprime [1, 2, 3].

# Create a list called original_list
original_list = [1, 2, 3]

# Create a shallow copy of original_list using list slicing
copied_list = original_list[:]

# Modify the first element of copied_list
copied_list[0] = 99

print(original_list)
[1, 2, 3]

Nesse contexto, usamos o método de fatiamento de lista para incluir tudo na lista, mas em outros contextos, o fatiamento pode ser usado para criar sublistas especificando os índices de início e fim.

Python Shallow Copy vs. Cópia superficial. Cópia profunda

Entender a diferença entre cópia superficial e profunda é importante para evitar a transformação não intencional dos dados. 

  • Uma cópia superficial copia apenas os elementos de nível superior da lista e não afeta as listas aninhadas ou os objetos mutáveis dentro da lista que fazem referência aos mesmos objetos. As alterações feitas nos objetos mutáveis afetarão tanto a lista original quanto a copiada.
  • A cópia profunda copia recursivamente todos os elementos, inclusive listas aninhadas e objetos mutáveis, criando cópias independentes. As alterações feitas nos objetos aninhados na lista copiada não afetarão a lista original.

Recomendo que você use a função copy.copy() para cópia superficial e a função copy.deepcopy() para cópia profunda. 

Método

Cópia superficial

Cópia profunda

copy()

construtor list()

Fatiamento de lista [:]

copy.copy()

copy.deepcopy()

Como copiar uma lista aninhada em Python

Ao lidar com listas aninhadas ou estruturas de dados complexas, são necessários métodos de cópia de lista mais sofisticados. Vamos examinar as diferentes técnicas para lidar com listas aninhadas.

Usando copy.copy()

O módulo copy fornece a função copy() que cria uma cópia superficial de uma lista. A função copy() é mais explícita do que usar o construtor list() ou o fatiamento de lista [:]. Você pode usar esse método quando quiser enfatizar a criação de uma cópia superficial de uma lista para melhorar a legibilidade.

O exemplo abaixo mostra como você pode copiar uma lista aninhada. O código imprimirá [1, 2, [99, 4]] porque a lista aninhada ainda é o mesmo objeto.

# Import the copy module to access the copy.copy() function
import copy

# Original list with nested structure
original_list = [1, 2, [3, 4]]

# Create a shallow copy using copy.copy()
shallow_copied_list = copy.copy(original_list)

# Modifying the nested list in the copied list
shallow_copied_list[2][0] = 99

print(original_list)
[1, 2, [99, 4]]

Usando copy.deepcopy()

A função deepcopy() também está disponível no módulo copy. Essa função cria uma cópia profunda da lista, duplicando a própria lista e todos os objetos aninhados. A função deepcopy() é importante quando você trabalha com objetos mutáveis em listas, pois garante que as alterações nas listas copiadas não afetem a lista original.

O código abaixo imprime [1, 2, [3, 4]].

# Import the copy module to access the copy.deepcopy() function
import copy

# Original list with nested structure
original_list = [1, 2, [3, 4]]

# Create a deep copy using copy.deepcopy()
deep_copied_list = copy.deepcopy(original_list)

# Modifying the nested list in the copied list
deep_copied_list[2][0] = 99

print(original_list)
[1, 2, [3, 4]]

Conclusão

Entender como copiar listas em Python é importante para que você possa manipular dados com eficiência. Neste tutorial, aprendemos diferentes métodos para copiar uma lista em Python e exploramos algumas das diferenças entre os métodos de cópia superficial e cópia profunda. Como analista de dados, é importante escolher a técnica apropriada de cópia de lista com base em seus requisitos específicos. Recomendo que você pratique os métodos discutidos para entender melhor seus casos de uso.

Faça o programa de habilidades em programação Python da DataCamp para aprimorar suas habilidades de programação com as melhores técnicas. Também recomendo que você confira nossos programas de carreira Python Developer e Data Analyst with Python para ajudá-lo a continuar desenvolvendo habilidades práticas e relevantes para o trabalho.

Perguntas frequentes

Qual é a diferença entre cópia superficial e cópia profunda?

O método shallow copy cria uma nova lista e a referencia com os mesmos valores da lista original, de modo que as alterações nos objetos da lista copiada afetem a lista original. A cópia profunda cria uma nova lista e insere recursivamente os valores da lista original, de modo que as alterações nos objetos aninhados na lista copiada não afetam a lista original.

Quais são os métodos para criar uma cópia superficial em Python?

Você pode criar uma cópia superficial de uma lista usando o método copy(), o fatiamento de lista [:], o construtor list() ou a função copy() do módulo copy.

Como você cria uma cópia profunda de uma lista em Python?

Você pode criar uma cópia profunda de uma lista usando a função deepcopy() do módulo copy.

Tópicos

Aprenda Python com a DataCamp

Curso

Introdução ao Python

4 h
6.6M
Domine os fundamentos da análise de dados com Python em quatro horas e explore pacotes populares.
Ver detalhesCodestin Search App
Iniciar curso
Ver maisCodestin Search App
Relacionado

Tutorial

Tutorial de funções Python

Um tutorial sobre funções em Python que aborda como escrever funções, como chamá-las e muito mais!
Karlijn Willems's photo

Karlijn Willems

Tutorial

Tutorial de compreensão de dicionário Python

Saiba tudo sobre a compreensão de dicionário do Python: como você pode usá-la para criar dicionários, substituir loops for (aninhados) ou funções lambda por map(), filter() e reduce(), ...!
Sejal Jaiswal's photo

Sejal Jaiswal

Tutorial

Tutorial de conjuntos e teoria de conjuntos em Python

Aprenda sobre os conjuntos do Python: o que são, como criá-los, quando usá-los, funções incorporadas e sua relação com as operações da teoria dos conjuntos.
DataCamp Team's photo

DataCamp Team

Ver maisVer mais