Parece-me que você está lutando com a pergunta que mutável / imutável realmente significa . Então, aqui está uma explicação simples:
Primeiro, precisamos de uma base para basear a explicação.
Então pense em qualquer coisa que você programa como um objeto virtual, algo que é salvo na memória do computador como uma sequência de números binários. (Não tente imaginar isso muito difícil. ^^) Agora, na maioria das linguagens de computador, você não trabalha diretamente com esses números binários, mas, mais ainda, usa uma interpretação dos números binários.
Por exemplo, você não pensa em números como 0x110, 0xaf0278297319 ou similar, mas pensa em números como 6 ou Strings como "Olá, mundo". Mesmo assim, esses números ou seqüências de caracteres são uma interpretação de um número binário na memória do computador. O mesmo vale para qualquer valor de uma variável.
Em suma: Nós não programar com valores reais, mas com interpretações de valores binários reais.
Agora, temos interpretações que não devem ser alteradas por razões de lógica e outras "coisas legais", enquanto há interpretações que podem muito bem ser alteradas. Por exemplo, pense na simulação de uma cidade, em outras palavras, um programa onde existem muitos objetos virtuais e alguns deles são casas. Agora, esses objetos virtuais (as casas) podem ser alterados e ainda podem ser considerados as mesmas casas? Bem, é claro que eles podem. Assim, eles são mutáveis: podem ser alterados sem se tornar um objeto "completamente" diferente.
Agora pense em números inteiros: esses também são objetos virtuais (sequências de números binários na memória de um computador). Então, se mudarmos um deles, como aumentar o valor seis por um, ainda é um seis? Bem, claro que não. Assim, qualquer número inteiro é imutável.
Portanto: se qualquer alteração em um objeto virtual significa que ele realmente se torna outro objeto virtual, é chamado de imutável.
Considerações finais:
(1) Nunca misture sua experiência no mundo real de mutável e imutável com a programação em um determinado idioma:
Toda linguagem de programação possui uma definição própria sobre quais objetos podem ser silenciados e quais não.
Portanto, embora agora você possa entender a diferença de significado, ainda precisa aprender a implementação real de cada linguagem de programação. ... De fato, pode haver o propósito de uma linguagem na qual um 6 pode ser silenciado para se tornar um 7. Então, novamente, isso seria algo muito louco ou interessante, como simulações de universos paralelos.
(2) Essa explicação certamente não é científica, serve para ajudá-lo a entender a diferença entre mutável e imutável.