1
resposta

Por que quando eu atribuo uma lista para outra lista, o comportamento é diferente de outras variáveis?

Se eu atribuir uma variável string para outra variável string, posso alterar uma delas que a outra permanece inalterada:

texto = 'banana'
texto_2 = texto
texto_2 = 'laranja'
print(texto == texto_2)

Resposta: False

Porém, por qual motivo esse comportamento é diferente no caso de listas?

frutas = ['banana', 'laranja', 'abacaxi']
frutas_2 = frutas
frutas_2.pop()
print(frutas == frutas_2)

Resposta: True

1 resposta

Boas Maurício! Tudo bem? Espero que sim!

Em verdade, o que ocorre é que quando você escreve

frutas_2 = frutas

Você não criou uma cópia da lista, só criou um uma nova variável que se refere ao mesmo endereço de memória dessa lista. Em outras palavras, quando você faz frutas_2 = frutas, você só está criando dois jeitos de se referir à mesma coisa.

Portanto, quando você usa o frutas_2.pop() você está retirando um elemento do endereço de memória de frutas_2, que é o mesmo endereço de frutas.

Se você quiser criar uma cópia da lista, a forma mais fácil é usando a função copy():

frutas = ['banana', 'laranja', 'abacaxi']
frutas_2 = frutas.copy()

Dessa forma, a variável frutas 2 possui uma lista semelhante, porem em um novo endereço de memória. Agora podemos efetuar o teste que você fez:

frutas_2.pop()

frutas_2 == frutas

Que retorna false.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!