Considere o código em Python 3 a seguir.a = [2,4,3] b = a[:]...
Considere o código em Python 3 a seguir.
a = [2,4,3]
b = a[:]
c = a
a.append(7)
print(b + c)
O resultado da execução desse código será
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito: D
O que precisava saber: Era necessário distinguir dois comportamentos: b = a[:] gera uma nova lista com os mesmos elementos de a no momento da cópia, enquanto c = a faz c apontar para a mesma lista de a. Depois, a.append(7) altera a lista original, de modo que a e c passam a conter 7 no final. Por fim, o operador + entre listas faz concatenação, não soma numérica.
Critério decisivo: b = a[:] cria uma cópia rasa da lista no momento da atribuição, enquanto c = a cria uma referência para a mesma lista de a; após a.append(7), apenas a e c passam a conter o 7. Assim, b + c concatena [2, 4, 3] com [2, 4, 3, 7].
- Verifique sempre se a atribuição cria cópia da lista ou apenas outra referência para o mesmo objeto.
- Quando houver append(), considere que a alteração ocorre na lista existente e afeta todas as variáveis que apontam para ela.
- Em expressões com listas e operador +, trate o resultado como concatenação dos elementos na ordem em que as listas aparecem.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Não faz sentido ter ocorrência do 7 ao final se a variável A so é alteranda depois do processamento de B e C, teriamos a= [2,4,3,7] e b=[2,4,3] e c=[2,4,3]. Se o append fosse antes tudo bem
Parece simples, mas se não aprofundou como os tipos de objetos em python funcionam vai errar. o objeto tipo lista(list ou []) é objeto mutável e isso quer dizer que na hora da atribuição para outra variavel(c=a), c não é uma instância nova, mas a referência ou próprio objeto list. Agora o exemplo de "b = a[:]" ou "b = a[::]" ou "b = a.copy()" vai gerar uma cópia dos elementos dentro da lista e jogar em um objeto diferente. Isso se dá pela propriedade de mutabilidade do objeto "list"
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo