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