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!