Blog

Postado em em 24 de maio de 2021

Como Copiar Listas em Python da Forma Correta?

Nessa aula vamos te mostrar como copiar listas em Python da maneira correta sem que você acabe duplicando suas ações na lista!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber a planilha que usamos na aula no seu e-mail, preencha:

Resumo

Nessa aula nós vamos te mostrar como copiar uma lista em Python sem que você simplesmente iguale uma variável a essa lista.

Isso não é possível, pois vai apontar para o mesmo local da lista, então elas serão iguais mesmo que tenha atribuído a outra variável.

Isso quer dizer que mesmo que utilize o append para adicionar um elemento você vai adicionar esse elemento nas 2 listas e não apenas em uma!

Então uma das formas de resolver esse problema é passar todos os elementos dessa lista para outra variável ou utilizar o .copy para de fato criar uma cópia correta!

O que vamos aprender nessa aula!

Como Copiar uma Lista em Python?

Você já deve ter tentado copiar uma lista em Python, certo? Mas você sabe qual a maneira correta de fazer essa cópia?

Se não sabe, está no lugar certo, pois nessa aula eu vou te ensinar como fazer isso do jeito certo. Curioso para saber como isso tudo funciona? Então vamos ao próximo tópico!

Copiando Listas em Python da Maneira Correta!

Antes de tudo é necessário que você saiba o que é uma lista em Python para que consiga prosseguir com a parte de cópia dela!

Então, o que é uma lista em Python? Uma lista é uma estrutura de dados que é que possui as informações de forma linear, ou seja, parece uma matriz.

Então vai poder acessar as informações dela a partir de um índice (lembrando que sempre começa em 0).

Sabendo que lista nada mais é do que um conjunto de informações organizadas de forma linear já podemos passar para a parte de cópia.

OBS: Vale lembrar que o programa que vamos utilizar é o PyCharm, caso ainda não tenha instalado no seu computador basta clicar aqui que temos um vídeo com o passo a passo de instalação!

lista_a = ["Lira", "Alon", "Julia", "Jessica"]

lista_b = lista_a

lista_b.append("Feijao")

print(lista_b)

print(lista_a)
image 3

O jeito mais intuitivo é simplesmente criar uma lista e em uma segunda variável simplesmente atribuir essa lista a ela.

Que é o que fazemos normalmente dentro do Python, certo? Nesse caso não…

Infelizmente com listas quando fazemos essa atribuição de lista_b = lista_a nós estamos apontando para o mesmo local em que essa lista foi armazenada, isso quer dizer que a variável lista_b vai apontar para o mesmo local da lista_a.

Dessa forma não vamos ter diferença entre as listas. Por isso ao utilizar o append para acrescentar mais um elemento a lista_b é possível observar que o resultado é o mesmo (utilizando o print para mostrar as duas listas) para as duas listas.

Isso quer dizer que tanto a lista A quanto a lista B vão receber o elemento feijão. Você provavelmente não quer que as listas fiquem com a mesma informação.

Então vamos te mostrar duas maneiras de resolver esse problema!

Da mesma forma em que você acrescenta informações ela é adicionada nas duas listas, se remover uma informação ela também será removida das duas listas.

Isso porque estamos apontando para o mesmo local da lista, ou seja, é como se as duas variáveis estivessem buscando a lista de um mesmo lugar.

Esse tipo de cópia é chamada de cópia rasa, pois por mais que pareça uma cópia, o que na verdade temos é 2 do mesmo, então qualquer alteração em uma será feita na outra.

É como se tivesse duas variáveis iguais, ou seja, 2 da lista_a por exemplo, pois o que fizer em uma, claramente será feita na outra, pois são a mesma lista.

Como Passar os Elementos da Lista em Python

Temos duas formas de passar os elementos de uma lista para a outra, veja que não vamos copiar e sim passar o conteúdo de uma lista para outra.

lista_c = lista_a[:] # ou então lista_c = lista_a.copy()
lista_c.append("Arroz")
print(lista_c)
print(lista_a)
image 4

A primeira opção é passando todos os elementos de uma lista para a outra utilizando o [:], pois dessa forma o Python entende que não vamos passar apenas 1 elemento e sim todos eles.

A outra forma é utilizando o módulo copy, que é fazendo lista_a.copy(), desta forma o Python vai de fato criar uma cópia e não apontar para o mesmo local da lista A.

Então temos 2 opções para de fato fazer uma cópia sem apontar para o mesmo local. Isso quer dizer que se adicionarmos ou excluirmos uma informação em uma lista, isso não acontecerá na outra.

Lista de Lista no Python

Por mais que essa solução inicial funcione para a cópia de listas, ela infelizmente não funciona para lista de lista, então precisamos resolver esse problema também!

Mas o que seria essa lista de lista para começar? É quando temos de fato uma matriz, ou seja, quanto temos linhas e colunas dentro dessa lista e queremos alterar apenas um elemento dela.

produtos = [
    ["Ipad", 5000],
    ['Iphone', 4500],
]
produtos_2 = produtos.copy()
produtos_2[0][1] = 6000
print(produtos_2)
print(produtos)

Nesse caso estamos tentando copiar a lista produtos e alterar a linha 0 (que é a primeira) e o elemento 1 (que é o segundo elemento, pois começa em 0).

Isso seria o valor do Ipad, então estaríamos alterando de 5000 para 6000. No entanto, teremos o mesmo problema do nosso primeiro caso.

Vamos ter os valores das duas listas sendo alterados, porque esse processo com o módulo copy não funciona para lista de lista.

Claro que não fica por isso mesmo, para resolver esse problema vamos utilizar um deepcopy, que seria uma “cópia profunda” para ignorar essas camadas e aceitar a nossa cópia.

import copy
produtos_3 = copy.deepcopy(produtos)
produtos_3[1][1] = 5500
print(produtos_3)
print(produtos)

Diferente da nossa “cópia rasa”, aqui nós vamos utilizar uma biblioteca para fazer esse cópia. Então vamos importar o copy e dentro dele vamos poder utilizar o deepcopy para fazer essa cópia sem problemas.

É basicamente a solução que tivemos para o primeiro problema, só que essa vai ser aplicada a lista de lista, pois a nossa solução inicial não funciona aqui.

Então agora vai conseguir fazer sua cópia sem problemas mesmo quando tiver uma lista de lista.

Conclusão de Como Copiar Listas em Python

Nessa aula eu te mostrei como copiar listas em Python da maneira correta, pois como deve ter notados nos exemplos, a cópia de maneira errada, pode prejudicar o seu trabalho.

No exemplo eu te mostrei

Nessa aula foi possível observar o que acontece quando utilizamos os meios comuns para copiar uma lista dentro do Python.

E como de fato fazer a cópia tanto de uma lista quanto de uma lista de lista para que não aplique o seu resultado a todas elas.

Até porque quando fazemos uma cópia queremos utilizá-la sem alterar nada da lista original, então é muito importante lembrar desses passos para que não faça alterações erradas nas suas listas!

Agora é hora da prática, então agora que sabe como copiar listas em Python

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador