Referenciando Listas - Copiando do jeito Errado
Vamos criar a list1:
list1 = [1, 2, 3, 4]
O que acontece por trás dos planos é que existe um bloco de memória no seu computador, com a lista [1, 2, 3, 4] armazenado lá. A varável list1 tem um endereço que aponta para esse bloco de memória.
Agora vamos criar outra lista, a list2.
Fazendo uma cópia direta: list2 = list1
Agora faça um teste, mude um valor da list1, por exemplo:
list1[0] = 0
Agora a list1 será [0,2,3,4].
Porém, se você der um print em list2 vai ver que ela também é [0, 2, 3, 4]
Mas peraí Python!
Eu queria mudar só a list1! E não a list2.
Por que isso ocorre?
Simples, ao fazermos list2=list1, faremos com que list2 também aponte para aquele endereço de memória.
Então, se alterar o valor naquele bloco de memória, essa mudança vai ser visível para todas as variáveis que apontem para ĺa!
Copiando do Jeito Certo e Difícil
Uma solução para copiar corretamente é copiar item por item:list2 = [] for item in list1: list2.append(item)
Copiando do Jeito Certo e Fácil
Ou uma solução ainda mais elegante:list2 = [] + list1
O que fizemos foi concatenar a lista list1 com outra lista (vazia), e o resultado é uma cópia de list1, mas agora list2 não aponta para o mesmo bloco de memória.
Bacana copiar dessa maneira, não é?
Ou ainda numa solução mais elegante e simples com o operador :
ResponderExcluirlist1 = ['segunda', 'terça', 'quarta', 'quinta', 'sexta', 'sábado', 'domingo']
list2 = list1[:]
Essa sua solução de fatiar lista não é elegante. Uma sintaxe estranha remete a uma logica estranha. Considerando boas práticas de programação não faz sentido usá-la nunca.
ExcluirCopiando do Jeito MAIS Certo e ainda MAIS Fácil com uma solução MAIS elegante ainda, seria utilizando o Deep Copy:
ResponderExcluirlist2 = list1.copy()