Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida no Ex. 1 da Aula 3 - Tuples e dictionary

Olá,

Pela vídeo-aula, achei que era impossível alterar os dados de uma tupla. Para isso, foi utilizado o exemplo com o método append(). Entretanto, eu consigo alterar a tupla com a concatenação. Isso então não demonstra que a tupla pode ser alterada?

Obrigado,

2 respostas
solução!

A questão é que ela não é alterada no local, Thiago. Tente fazer o seguinte no console do Python, por exemplo:

>>> lista = [1,2,3]
>>> lista
>>> [1, 2, 3]
>>> lista2 = lista
>>> lista2
>>> [1, 2, 3]
>>> id(lista)
>>> 1
>>> id(lista2)
>>> 1
>>> lista.append(4)
>>> lista
>>> [1, 2, 3, 4]
>>> lista2
>>> [1, 2, 3, 4]
>>> id(lista)
>>> 1
>>> id(lista2)
>>> 1

e compare com o comportamento diferente de se tentarmos com uma tupla:

>>> tupla = (1, 2, 3)
>>> tupla
>>> (1, 2, 3)
>>> tupla2 = tupla
>>> tupla2
>>> (1, 2, 3)
>>> id(tupla)
>>> 1
>>> id(tupla2)
>>> 1
>>> tupla += (4, 5, 6)
>>> tupla
>>> (1, 2, 3, 4, 5, 6)
>>> tupla2
>>> (1, 2, 3)
>>> id(tupla)
>>> 2
>>> id(tupla2)
>>> 1

Percebe que com as listas, ao alterarmos uma delas, as duas se alteram? Isso acontece porque a lista pode ser alterada no local, ou seja, o próprio objeto que criamos quando dissemos ao interpretador lista = [1,2,3] foi alterado e ambas as variáveis lista e lista2 referenciam este mesmo objeto de tipo list - como podemos ver ao chamarmos a função id.

Com as tuplas isso não acontece - elas não podem ser alteradas no local. Perceba que, assim como ao concatenarmos nossa variável tupla não alteramos a tupla2, o ID da tupla muda após essa concatenação. Isso porque não estamos alterando o objeto que criamos com tupla = (1, 2, 3), mas sim criando um novo objeto do tipo tuple, apagando a referência que o nome tupla tem com o objeto de ID 1 (ainda referenciado pelo nome de variável tupla2) e de valor imutável de (1, 2, 3) e adicionando uma referência do nome tupla ao objeto de ID 2 cujo valor - também imutável - é de (1, 2, 3, 4, 5, 6).

Isso talvez não fique muito claro por enquanto (provavelmente vai ficando cada vez mais a medida que você explora e conhece mais a linguagem Python), mas espero que tenha dado para entender. Abraços e bons estudos!

OBS: os IDs 1 e 2 foram criados para facilitar a exemplificação!

Oi Thiago, a reposta do Yan foi ultra completa. Se você não tem mais dúvidas, não deixe de marcar a resposta dele como solução. Combinado?

Sucesso e bom estudo para os dois!