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 quedeepcopy
, mas não lida com objetos mutáveis aninhados.list(minha_lista)
: Mais rápido quecopy.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.
Cursos de programação gratuitos com certificado
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
- Conteúdos gratuitos
- Projetos práticos
- Certificados
- +20 mil alunos e comunidade exclusiva
- Materiais didáticos e download de código
Comentários