-
Title:
03-15 Yello Mutation
-
Description:
-
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.