[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:03.00,Default,,0000,0000,0000,,Eu falei para você que mutação Dialogue: 0,0:00:03.00,0:00:05.00,Default,,0000,0000,0000,,modifica um objeto existente. Dialogue: 0,0:00:05.00,0:00:10.00,Default,,0000,0000,0000,,Mas, de fato, você ainda não pode de fato ver a diferença entre isso e o que fizemos com strings. Dialogue: 0,0:00:10.00,0:00:14.00,Default,,0000,0000,0000,,Onde você irá perceber a diferença é quando introduzimos uma nova variável. Dialogue: 0,0:00:14.00,0:00:17.00,Default,,0000,0000,0000,,Vamos voltar ao exemplo que vimos anteriormente, Dialogue: 0,0:00:17.00,0:00:19.00,Default,,0000,0000,0000,,mas agora vamos adicionar um comando de atribuição extra, Dialogue: 0,0:00:19.00,0:00:23.00,Default,,0000,0000,0000,,e vamos introduzir uma nova variável. Dialogue: 0,0:00:23.00,0:00:25.00,Default,,0000,0000,0000,,Suponha que introduzimos a variável q, Dialogue: 0,0:00:25.00,0:00:29.00,Default,,0000,0000,0000,,e atribuímos p a q -- isso significa que o valor de p, Dialogue: 0,0:00:29.00,0:00:31.00,Default,,0000,0000,0000,,que é o objeto que é esta lista, Dialogue: 0,0:00:31.00,0:00:34.00,Default,,0000,0000,0000,,é agora aquele que q referencia. Dialogue: 0,0:00:34.00,0:00:37.00,Default,,0000,0000,0000,,O importante aqui é que, depois da atribuição, Dialogue: 0,0:00:37.00,0:00:40.00,Default,,0000,0000,0000,,p e q referenciam a mesma lista. Dialogue: 0,0:00:40.00,0:00:43.00,Default,,0000,0000,0000,,Suponha que fazemos um comando de atribuição Dialogue: 0,0:00:43.00,0:00:50.00,Default,,0000,0000,0000,,para modificar o valor de um dos elementos de q. Dialogue: 0,0:00:50.00,0:00:53.00,Default,,0000,0000,0000,,Bem, isto muda o elemento 4 de q -- Dialogue: 0,0:00:53.00,0:00:55.00,Default,,0000,0000,0000,,então, este é o elemento 4 de q, Dialogue: 0,0:00:55.00,0:00:58.00,Default,,0000,0000,0000,,e isso muda este valor, Dialogue: 0,0:00:58.00,0:01:01.00,Default,,0000,0000,0000,,para o novo ponto de exclamação. Dialogue: 0,0:01:01.00,0:01:03.00,Default,,0000,0000,0000,,Isso muda também o valor de p: Dialogue: 0,0:01:03.00,0:01:07.00,Default,,0000,0000,0000,,mesmo que o comando de atribuição não mencione p, Dialogue: 0,0:01:07.00,0:01:11.00,Default,,0000,0000,0000,,o fato de que p e q referenciam o mesmo objeto Dialogue: 0,0:01:11.00,0:01:13.00,Default,,0000,0000,0000,,significa que isto altera o valor de p. Dialogue: 0,0:01:13.00,0:01:15.00,Default,,0000,0000,0000,,Para mostrar a você que as coisas são diferentes com strings, Dialogue: 0,0:01:15.00,0:01:17.00,Default,,0000,0000,0000,,vamos tentar isso com uma string. Dialogue: 0,0:01:17.00,0:01:20.00,Default,,0000,0000,0000,,Veja se você adivinha o que acontece quanto tentamos usar atribuição Dialogue: 0,0:01:20.00,0:01:23.00,Default,,0000,0000,0000,,para substituir a primeira letra da string. Dialogue: 0,0:01:23.00,0:01:25.00,Default,,0000,0000,0000,,Vamos executar, para ver o que acontece. Dialogue: 0,0:01:25.00,0:01:27.00,Default,,0000,0000,0000,,E o que obtemos é um erro, Dialogue: 0,0:01:27.00,0:01:30.00,Default,,0000,0000,0000,,e obtemos um erro porque uma string não é mutável. Dialogue: 0,0:01:30.00,0:01:32.00,Default,,0000,0000,0000,,Não existe uma maneira de mudar o valor de uma string, Dialogue: 0,0:01:32.00,0:01:36.00,Default,,0000,0000,0000,,e o erro diz que não há como fazer uma atribuição a uma string -- Dialogue: 0,0:01:36.00,0:01:41.00,Default,,0000,0000,0000,,que esse tipo de objeto, como é imutável, não suporta atribuição. Dialogue: 0,0:01:41.00,0:01:44.00,Default,,0000,0000,0000,,Uma diferença fundamental entre objetos mutáveis e objetos imutáveis Dialogue: 0,0:01:44.00,0:01:47.00,Default,,0000,0000,0000,,é que, se o objeto for mutável, Dialogue: 0,0:01:47.00,0:01:51.00,Default,,0000,0000,0000,,então temos que nos preocupar com outras variáveis que possam referenciar esse mesmo objeto. Dialogue: 0,0:01:51.00,0:01:53.00,Default,,0000,0000,0000,,Podemos modificar o valor desse objeto, Dialogue: 0,0:01:53.00,0:01:57.00,Default,,0000,0000,0000,,e isso afetar não apenas a variável que pensamos estar alterando, Dialogue: 0,0:01:57.00,0:02:00.00,Default,,0000,0000,0000,,mas afetar também outra variáveis. Dialogue: 0,0:02:00.00,0:02:02.00,Default,,0000,0000,0000,,Vamos ver um exemplo disso. Dialogue: 0,0:02:02.00,0:02:07.00,Default,,0000,0000,0000,,Eu inicializei p com uma lista contendo as strings 'H', 'e', 'l', 'l', 'o'. Dialogue: 0,0:02:07.00,0:02:11.00,Default,,0000,0000,0000,,Agora, eu tenho uma atribuição que introduz uma nova variável q, Dialogue: 0,0:02:11.00,0:02:13.00,Default,,0000,0000,0000,,e atribuo p a esta variável. Dialogue: 0,0:02:13.00,0:02:15.00,Default,,0000,0000,0000,,E vamos imprimir os valores de p e de q, Dialogue: 0,0:02:15.00,0:02:19.00,Default,,0000,0000,0000,,e var que ambas, p e q, contêm a string "Hello". Dialogue: 0,0:02:19.00,0:02:23.00,Default,,0000,0000,0000,,Mas, agora, vamos modificar o valor na posição 0. Dialogue: 0,0:02:23.00,0:02:26.00,Default,,0000,0000,0000,,Agora, temos uma atribuição que armazena, Dialogue: 0,0:02:26.00,0:02:30.00,Default,,0000,0000,0000,,na posição 0 de p, a letra 'Y'. Dialogue: 0,0:02:30.00,0:02:35.00,Default,,0000,0000,0000,,Isso modifica o valor de p. Dialogue: 0,0:02:35.00,0:02:43.00,Default,,0000,0000,0000,,O que pode ser surpresa é que isso também altera o valor de q. Dialogue: 0,0:02:43.00,0:02:46.00,Default,,0000,0000,0000,,Mesmo que não tenhamos usado q na atribuição, Dialogue: 0,0:02:46.00,0:02:49.00,Default,,0000,0000,0000,,isso podifica o valor de q, porque q Dialogue: 0,0:02:49.00,0:02:52.00,Default,,0000,0000,0000,,referencia o mesmo objeto que p.