72 Capítulo 2
tenha cuidado com a cópia
Parece uma Cópia, Mas Não É
Ao copiar uma lista existente para outra, é tentador usar o operador de atribuição:
>>> first = [1, 2, 3, 4, 5]
>>> first
[1, 2, 3, 4, 5]
>>> second = first
>>> second
[1, 2, 3, 4, 5]
Crie uma nova lista (e atribua
cinco objetos de número a ela).
Os cinco números da lista “first”
“Copie” a lista existente para
uma nova, chamada “second”.
Os cinco números da lista “second”
Até agora, tudo bem. Parece que funcionou, pois os cinco objetos de número
de first foram copiados para second:
>>> second.append(6)
>>> second
[1, 2, 3, 4, 5, 6]
Parece certo, mas não está.
Foram mesmo? Vejamos o que acontece quando anexamos com append um
novo número a second, o que parece ser algo razoável a fazer, mas que leva
a um problema:
2 43
1
5
first second
De novo, até agora, tudo bem — mas há um erro aqui. Veja o que acontece
quando pedimos que o shell exiba o conteúdo de first — o novo objeto é
anexado a first também!
>>> first
[1, 2, 3, 4, 5, 6]
Opa! O novo objeto é
anexado a “first” também.
first second
2 43
1
5
6
É um problema, pois first e second estão apontando para os mesmos
dados. Se você mudar uma lista, a outra mudará também. Isso não é bom.
CG_HeadFirst_Python.indb 72 18/07/2018 13:18:13
Get USE A CABEÇA! PYTHON now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.