Como Copiar uma Lista em Python

Ana Maria Gomes
5 minutos de leitura

Conteúdos do tutorial

Ao trabalhar com listas em Python, você pode ter se deparado com uma situação em que atribui uma lista a outra, apenas para descobrir que mudanças na nova lista também afetam a lista original. Isso acontece porque a simples atribuição nova_lista = minha_lista não cria uma cópia da lista; ela apenas cria uma nova referência para a mesma lista. Para evitar isso, vamos mostrar como copiar uma lista corretamente em Python.

Entendendo Atribuição de Lista e Clonagem

Quando você usa o operador de atribuição (=) com listas, você não está criando uma nova lista independente. Em vez disso, você está criando uma segunda referência para a mesma lista na memória. Isso significa que quaisquer modificações em nova_lista serão refletidas em minha_lista e vice-versa.

Métodos para Copiar uma Lista em Python

Para copiar uma lista de modo que ela seja independente da original, você tem várias opções:

Usando list.copy()

No Python 3.3 e posteriores, você pode usar o método list.copy():

nova_lista = minha_lista.copy()

Usando Fatiamento de Lista

Fatiamento de lista é uma maneira comum e legível de copiar uma lista:

nova_lista = minha_lista[:]

Usando o Construtor list()

Outro método direto é usar o construtor list():

nova_lista = list(minha_lista)

Usando copy.copy()

Para uma solução mais genérica, você pode usar a função copy() do módulo copy:

import copy
nova_lista = copy.copy(minha_lista)

Este método é um pouco mais lento porque precisa determinar o tipo de dado de minha_lista primeiro.

Usando copy.deepcopy()

Se sua lista contém outros objetos mutáveis como listas, dicionários ou instâncias de classes, e você quer copiar esses também, use copy.deepcopy():

import copy
nova_lista = copy.deepcopy(minha_lista)

Este método é o mais lento e o que mais consome memória porque copia todos os objetos de forma recursiva.

Comparação de Desempenho

Aqui está um resumo rápido do desempenho de cada método:

  • copy.deepcopy(minha_lista): O mais lento, mas copia tudo de forma recursiva.
  • copy.copy(minha_lista): Mais rápido que deepcopy, mas não lida com objetos mutáveis aninhados.
  • list(minha_lista): Mais rápido que copy.copy().
  • nova_lista = []; nova_lista.extend(minha_lista): Ainda mais rápido.
  • minha_lista[:]: O método mais rápido para copiar uma lista.

No entanto, lembre-se de que copy.copy(), list[:] e list(list) não copiam listas aninhadas, dicionários e instâncias de classes dentro da lista. Se os originais mudarem, eles também mudarão na lista copiada.

Resumo

Para copiar uma lista em Python e garantir que ela não mude inesperadamente após a atribuição, você pode usar métodos como list.copy(), fatiamento de lista, o construtor list(), copy.copy() ou copy.deepcopy(). A escolha do método depende de se você precisa copiar objetos mutáveis aninhados e das considerações de desempenho para o seu caso específico. Lembre-se, a atribuição direta apenas cria uma referência para a mesma lista, não uma cópia independente.

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse:
Conteúdos do tutorial
Tags: