Resumo : neste tutorial, você aprenderá sobre o mutável e o imutável em Python.
Introdução ao mutável e imuável em Python
Em Python, tudo é um objeto. Um objeto tem seu próprio estado interno. Alguns objetos permitem alterar seu estado interno e outros não.
Um objeto cujo estado interno pode ser alterado é chamado de objeto mutável, enquanto um objeto cujo estado interno não pode ser alterado é chamado de objeto imutável.
A seguir estão exemplos de objetos imutáveis:
E a seguir estão exemplos de objetos mutáveis:
As classes definidas pelo usuário podem ser mutáveis ou imutáveis, dependendo se seu estado interno pode ser alterado ou não.
Exemplo imutável de Python
Quando você declara uma variável e atribui um número inteiro a ela, o Python cria um novo objeto inteiro e define a variável para fazer referência a esse objeto:
counter = 100
Linguagem de código: Python ( python )
Para obter o endereço de memória referenciado por uma variável, você usa a id()
função. A id()
função retorna um número baseado em 10:
print(id(counter))
Linguagem de código: Python ( python )
Saída:
140717671523072
Linguagem de código: Python ( python )
E para converter o número de base 10 em hexadecimal, você pode usar a hex()
função:
print(hex(id(100)))
Linguagem de código: Python ( python )
Saída:
0x7ffb62d32300
Linguagem de código: Python ( python )
Na memória, você tem uma variável chamada counter
que faz referência a um objeto inteiro localizado no 0x7ffb62d32300
endereço:
O seguinte altera counter
para 200 e exibe seu valor na tela:
counter = 200
print(counter)
Linguagem de código: Python ( python )
Saída:
200
Linguagem de código: Python ( python )
Parece que o valor do objeto referenciado pela counter
variável muda, mas isso não acontece.
Na verdade, Python cria um novo objeto inteiro com o valor 200 e reatribui a counter
variável para que ela faça referência ao novo objeto assim:
A reatribuição não altera o valor do primeiro objeto inteiro. Apenas reatribui a referência.
O seguinte mostra o endereço de memória do novo objeto referenciado pela counter
variável:
counter = 200
print(counter)
print(hex(id(counter)))
Linguagem de código: Python ( python )
Saída:
0x7ffb62d32f80
Linguagem de código: Python ( python )
Exemplo mutável em Python
O seguinte define uma lista de números e exibe o endereço de memória da lista:
ratings = [1, 2, 3]
print(hex(id(ratings))) # 0x1840f97a340
Linguagem de código: Python ( python )
Nos bastidores, Python cria um novo objeto de lista e define a ranks
variável para referenciar a lista:
Quando você adiciona um número à lista assim:
ratings.append(4)
Linguagem de código: Python ( python )
Python altera diretamente o valor do objeto de lista:
E Python não cria um novo objeto como o exemplo imutável anterior.
O código a seguir mostra o valor e o endereço de memória da lista referenciada pela ratings
variável:
print(ratings) # [1, 2, 3, 4]
print(hex(id(ratings))) # 0x1840f97a340
Linguagem de código: Python ( python )
Como você pode ver claramente na saída, o endereço de memória da lista é o mesmo.
Exemplo mutável e imutável de Python
É importante entender que objetos imutáveis não são algo congelado ou absolutamente constante. Vejamos um exemplo.
O seguinte define uma tupla cujos elementos são as duas listas:
low = [1, 2, 3]
high = [4, 5]
rankings = (low, high)
Linguagem de código: Python ( python )
Como rankings
é uma tupla, é imutável. Portanto, você não pode adicionar um novo elemento ou remover um elemento dele.
No entanto, a rankings
tupla contém duas listas que são objetos mutáveis. Portanto, você pode adicionar um novo elemento à high
lista sem problemas:
high.append(6)
print(rankings)
Linguagem de código: Python ( python )
E a rankings
tupla muda para o seguinte:
([1, 2, 3], [4, 5, 6])
Linguagem de código: Python ( python )
Resumo
- Um objeto cujo estado interno não pode ser alterado é chamado de imutável, por exemplo, um número, uma string e uma tupla.
- Um objeto cujo estado interno pode ser alterado é chamado mutável, por exemplo, uma lista, um conjunto e um dicionário.