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.
Actualizado 13 de ago. de 2024  · 7 min de leitura

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.

Temas

Aprenda Python com a DataCamp

curso

Introduction to Python

4 hr
5.7M
Master the basics of data analysis with Python in just four hours. This online course will introduce the Python interface and explore popular packages.
Ver DetalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

tutorial

Tutorial e exemplos de funções e métodos de lista do Python

Saiba mais sobre as funções e os métodos da Lista do Python. Siga exemplos de código para list() e outras funções e métodos Python agora!
Abid Ali Awan's photo

Abid Ali Awan

7 min

tutorial

Tutorial de indexação de lista Python()

Neste tutorial, você aprenderá exclusivamente sobre a função index().
Sejal Jaiswal's photo

Sejal Jaiswal

6 min

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

14 min

tutorial

Como remover um item de uma lista em Python

Entenda como você pode remover itens de uma lista em Python. Familiarize-se com métodos como remove(), pop() e del para o gerenciamento de listas.

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

14 min

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

13 min

See MoreSee More