Eu falei para você que mutação modifica um objeto existente. Mas, de fato, você ainda não pode de fato ver a diferença entre isso e o que fizemos com strings. Onde você irá perceber a diferença é quando introduzimos uma nova variável. Vamos voltar ao exemplo que vimos anteriormente, mas agora vamos adicionar um comando de atribuição extra, e vamos introduzir uma nova variável. Suponha que introduzimos a variável q, e atribuímos p a q -- isso significa que o valor de p, que é o objeto que é esta lista, é agora aquele que q referencia. O importante aqui é que, depois da atribuição, p e q referenciam a mesma lista. Suponha que fazemos um comando de atribuição para modificar o valor de um dos elementos de q. Bem, isto muda o elemento 4 de q -- então, este é o elemento 4 de q, e isso muda este valor, para o novo ponto de exclamação. Isso muda também o valor de p: mesmo que o comando de atribuição não mencione p, o fato de que p e q referenciam o mesmo objeto significa que isto altera o valor de p. Para mostrar a você que as coisas são diferentes com strings, vamos tentar isso com uma string. Veja se você adivinha o que acontece quanto tentamos usar atribuição para substituir a primeira letra da string. Vamos executar, para ver o que acontece. E o que obtemos é um erro, e obtemos um erro porque uma string não é mutável. Não existe uma maneira de mudar o valor de uma string, e o erro diz que não há como fazer uma atribuição a uma string -- que esse tipo de objeto, como é imutável, não suporta atribuição. Uma diferença fundamental entre objetos mutáveis e objetos imutáveis é que, se o objeto for mutável, então temos que nos preocupar com outras variáveis que possam referenciar esse mesmo objeto. Podemos modificar o valor desse objeto, e isso afetar não apenas a variável que pensamos estar alterando, mas afetar também outra variáveis. Vamos ver um exemplo disso. Eu inicializei p com uma lista contendo as strings 'H', 'e', 'l', 'l', 'o'. Agora, eu tenho uma atribuição que introduz uma nova variável q, e atribuo p a esta variável. E vamos imprimir os valores de p e de q, e var que ambas, p e q, contêm a string "Hello". Mas, agora, vamos modificar o valor na posição 0. Agora, temos uma atribuição que armazena, na posição 0 de p, a letra 'Y'. Isso modifica o valor de p. O que pode ser surpresa é que isso também altera o valor de q. Mesmo que não tenhamos usado q na atribuição, isso podifica o valor de q, porque q referencia o mesmo objeto que p.