Python mutável e imutável

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 = 100Linguagem 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:

140717671523072Linguagem 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:

0x7ffb62d32300Linguagem de código:  Python  ( python )

Na memória, você tem uma variável chamada counterque faz referência a um objeto inteiro localizado no 0x7ffb62d32300endereço:

Exemplo imutável de Python

O seguinte altera counterpara 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 countervariável muda, mas isso não acontece.

Na verdade, Python cria um novo objeto inteiro com o valor 200 e reatribui a countervariável para que ela faça referência ao novo objeto assim:

Exemplo imutável de Python

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 countervariável:

counter = 200
print(counter)
print(hex(id(counter)))Linguagem de código:  Python  ( python )

Saída:

0x7ffb62d32f80Linguagem 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)))  # 0x1840f97a340Linguagem de código:  Python  ( python )

Nos bastidores, Python cria um novo objeto de lista e define a ranksvariá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 ratingsvariável:

print(ratings)  # [1, 2, 3, 4]
print(hex(id(ratings)))  # 0x1840f97a340Linguagem 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.

Python mutável e imutável

No entanto, a rankingstupla contém duas listas que são objetos mutáveis. Portanto, você pode adicionar um novo elemento à highlista sem problemas:

high.append(6)
print(rankings)Linguagem de código:  Python  ( python )

E a rankingstupla muda para o seguinte:

([1, 2, 3], [4, 5, 6])Linguagem de código:  Python  ( python )
Python mutável e imutável

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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *