Portuguese, Brazilian subtitles

← 03-15 Yello Mutation

03-15 Yellow - Mutação

Get Embed Code
7 Languages

Showing Revision 2 created 08/01/2014 by Fran Ontanaya.

  1. Eu falei para você que mutação
  2. modifica um objeto existente.
  3. Mas, de fato, você ainda não pode de fato ver a diferença entre isso e o que fizemos com strings.
  4. Onde você irá perceber a diferença é quando introduzimos uma nova variável.
  5. Vamos voltar ao exemplo que vimos anteriormente,
  6. mas agora vamos adicionar um comando de atribuição extra,
  7. e vamos introduzir uma nova variável.
  8. Suponha que introduzimos a variável q,
  9. e atribuímos p a q -- isso significa que o valor de p,
  10. que é o objeto que é esta lista,
  11. é agora aquele que q referencia.
  12. O importante aqui é que, depois da atribuição,
  13. p e q referenciam a mesma lista.
  14. Suponha que fazemos um comando de atribuição
  15. para modificar o valor de um dos elementos de q.
  16. Bem, isto muda o elemento 4 de q --
  17. então, este é o elemento 4 de q,
  18. e isso muda este valor,
  19. para o novo ponto de exclamação.
  20. Isso muda também o valor de p:
  21. mesmo que o comando de atribuição não mencione p,
  22. o fato de que p e q referenciam o mesmo objeto
  23. significa que isto altera o valor de p.
  24. Para mostrar a você que as coisas são diferentes com strings,
  25. vamos tentar isso com uma string.
  26. Veja se você adivinha o que acontece quanto tentamos usar atribuição
  27. para substituir a primeira letra da string.
  28. Vamos executar, para ver o que acontece.
  29. E o que obtemos é um erro,
  30. e obtemos um erro porque uma string não é mutável.
  31. Não existe uma maneira de mudar o valor de uma string,
  32. e o erro diz que não há como fazer uma atribuição a uma string --
  33. que esse tipo de objeto, como é imutável, não suporta atribuição.
  34. Uma diferença fundamental entre objetos mutáveis e objetos imutáveis
  35. é que, se o objeto for mutável,
  36. então temos que nos preocupar com outras variáveis que possam referenciar esse mesmo objeto.
  37. Podemos modificar o valor desse objeto,
  38. e isso afetar não apenas a variável que pensamos estar alterando,
  39. mas afetar também outra variáveis.
  40. Vamos ver um exemplo disso.
  41. Eu inicializei p com uma lista contendo as strings 'H', 'e', 'l', 'l', 'o'.
  42. Agora, eu tenho uma atribuição que introduz uma nova variável q,
  43. e atribuo p a esta variável.
  44. E vamos imprimir os valores de p e de q,
  45. e var que ambas, p e q, contêm a string "Hello".
  46. Mas, agora, vamos modificar o valor na posição 0.
  47. Agora, temos uma atribuição que armazena,
  48. na posição 0 de p, a letra 'Y'.
  49. Isso modifica o valor de p.
  50. O que pode ser surpresa é que isso também altera o valor de q.
  51. Mesmo que não tenhamos usado q na atribuição,
  52. isso podifica o valor de q, porque q
  53. referencia o mesmo objeto que p.