Objetos mutáveis ​​e imutáveis ​​em Python {EXEMPLOS}

O que é um objeto mutável?

Mutável em Python pode ser definido como o objeto que pode mudar ou ser considerado como algo mutável na natureza. Mutável significa a capacidade de modificar ou editar um valor.

Objetos mutáveis ​​em Python permitir que os programadores tenham objetos que podem alterar seus valores. Eles geralmente são utilizados para armazenar uma coleção de dados. Pode ser considerado como algo que sofreu mutação e o estado interno aplicável dentro de um objeto mudou.

O que são objetos imutáveis?

Objetos imutáveis ​​em Python podem ser definidos como objetos que não mudam seus valores e atributos ao longo do tempo.
Esses objetos tornam-se permanentes uma vez criados e inicializados, e formam uma parte crítica das estruturas de dados usadas em Python.

Python é usado em números, tuplas, strings, conjuntos congelados e classes definidas pelo usuário com algumas exceções. Eles não podem mudar e seus valores permanecem permanentes quando são inicializados e, portanto, chamados de imutáveis.

In Python, tudo é um objeto

De acordo com o relatório Python linguagem de programação, tudo pode ser considerado como um objeto composto por listas, inteiros e funções. Este recurso pode ser comparado com outras linguagens de programação que suportam objetos.

Este recurso pode ser verificado usando um Python intérprete conforme mostrado abaixo: -

Python código:

print("The following instance is an object:",isinstance(3,object))
print("Another instance for object", isinstance(True, object))
def my_func():
    return "guru99"
print("This is a function example and regarded as an object in Python:", isinstance(my_func, object))

Saída:

A following instance is an object: True
Another instance for object True
This is a function example and regarded as an object in Python: True

Além disso, Python fornece uma função interna chamada id que retorna o endereço do objeto conforme presente na memória do Python linguagem de programação.

Python código:

z=200
id(z)
print("The id of object is", id(z))

Saída:

the id of object is 9795360

No código acima, a função id tendo sintaxe como id(obj) fornece o endereço de obj em Python memória. Aqui, há um objeto chamado z e tem uma atribuição de 200. O objeto z é então passado para a função id como id(z), e o Python entrega o endereço do objeto como 9795360.

Objetos mutáveis ​​em Python

Em um objeto mutável, o valor do objeto muda ao longo de um período de tempo.

Neste exemplo, explicamos objetos mutáveis ​​em Python, e utiliza listas como uma aplicação de objetos mutáveis, conforme mostrado abaixo: –

Python Código:

mut_list = [1, 2, 3]
  print("The list in Python",mut_list)
mut_list[0] = 'Gurru99'
mut_list
  print("The list in Python after changing value",mut_list)

Saída:

The list in Python [1, 2, 3]
The list in Python after changing value ['Gurru99', 2, 3]

Como podemos ver no exemplo acima, a lista mutável em Python teve valores de 1,2,3. O primeiro elemento da lista mutável é alterado de 1 para Guru99 e não cria um novo objeto quando um novo valor é inicializado.

Aqui podemos usar o método id para utilizá-lo. A seguir ilustra o uso do método id para objetos mutáveis, conforme mostrado abaixo: –

Python Código:

mut_list = [1, 2, 3]
print("The list in Python",mut_list)
print("the id of the list is ",id(mut_list))
mut_list[0] = 'Gurru99'
mut_list
print("The mut list in Python after changing value",mut_list)
print("the id of the list is post change in value",id(mut_list))

saída

The list in Python [1, 2, 3]
the id of the list is 139931568729600
The list in Python after changing value ['Gurru99', 2, 3]
the id of the list is post change in value 139931568729600

A figura a seguir ilustra o objeto mutável em Python conforme mostrado abaixo: -

Objetos mutáveis ​​em Python

Objetos imutáveis ​​em Python

Objetos imutáveis ​​em Python são objetos em que as instâncias não mudam ao longo do período. Instâncias imutáveis ​​de um tipo específico, uma vez criadas, não mudam, e isso pode ser verificado usando o método id de Python.

Tomemos um exemplo de objetos do tipo inteiro em Python que ilustra o conceito de objetos imutáveis ​​em Python conforme mostrado abaixo: -

Python Código:

a=244
print("the number before change is",a)
print("the id of number before change is",id(a))
a=344
print("the number after change is",a)
print("the id of number after change is",id(a))

saída

the number before a change is 244
the id of number before change is 9796768
the number before change is 344
the id of number before change is 140032307887024

Pode-se ver acima que há mudança em “a”. Vamos estudar como funciona o mecanismo:

  • Não há alteração no valor do objeto quando a inicialização de “a” com 344.
  • Em vez disso, um novo objeto é criado e delimitado por “a”.
  • O outro objeto atribuído como 244 não estaria mais acessível.
  • O exemplo acima utilizou um objeto inteiro.

Em a=244, um novo objeto é criado e referenciado a “a” conforme mostrado abaixo: –

Objetos imutáveis ​​em Python

Poste usando a=344, há um novo objeto referenciado com “a”. O diagrama a seguir representa o mesmo: -

Objetos imutáveis ​​em Python

Portanto, sempre que há a atribuição de um novo valor ao nome do tipo int, ocorre uma alteração na vinculação do nome com outro objeto. O mesmo princípio se alinha com tuplas, cordas, float e booleano, portanto, denominado imutável.

Implicações para chaves de dicionário em Python

Dicionários podem ser definidos como coleções ordenadas que armazenam dados no formato de chave e não permitem duplicatas. Os dicionários contêm uma chave que possui um par de valores correspondente alinhado a ela. Eles são de tipo mutável e seu conteúdo pode ser alterado mesmo após sua inicialização e criação.

A qualquer momento, a chave aponta para um elemento específico de cada vez. As chaves dos dicionários são imutáveis.

Tomemos um cenário hipotético conforme mostrado abaixo: -

a = [4, 6]
b = [5, 6, 7]
my_dict = {a: 'x', b: 'y'}
print(my_dict)

Saída: - O acima Python o código não produz nenhuma saída e, em vez disso, gera um erro de tipo não lavável. Esta é uma situação hipotética e não é usada no Python compilador

Aqui, a é definido como [4,6] e no dicionário é definido como x. Aqui, b é definido como [5,6,7] e no dicionário é definido como y.

  • A chave 'a' tem o valor [4,6] e é posteriormente inicializada para x.
  • A chave 'b' tem o valor [5,6,7] que é posteriormente inicializado como 'y' em um dicionário.
  • Agora suponha que o valor de 'uma' é anexado com 5 e 7, que é uma chave para o dicionário.
  • Então o dicionário sofreu mutação e daria a ambos 'x' e 'você' como valores para o dicionário acima.

Considere o seguinte cenário conforme ilustrado acima: –

a = [5, 6,7]
b = [5, 6, 7]
my_dict = {a: 'x', b: 'y'}
print(my_dict)

Portanto, como linguagem de programação, Python torna as chaves do dicionário imutáveis ​​e os dicionários são tipos de dados imutáveis.

Exceções na imutabilidade

O Mercado Pago não havia executado campanhas de Performance anteriormente nessas plataformas. Alcançar uma campanha de sucesso exigiria Python fornece exceções à imutabilidade. Tais exceções podem ser observadas para o tipo de objeto tupla. Uma tupla pode ser uma combinação de tipos de objetos mutáveis ​​e imutáveis. Tomemos um exemplo para explicar as exceções de imutabilidade conforme mostrado abaixo: –

Python Código:

tupexample=([1,1],'guru99')
print("the tuple before change",tupexample)
print("the id of tuple before change",id(tupexample))
tupexample=([2,2],'guru99')
print("the tuple after change",tupexample)
print("the id of tuple after change",id(tupexample))

Saída:

the tuple before change ([1, 1], 'guru99')
the id of tuple before change 140649480694656
the tuple after change ([2, 2], 'guru99')
the id of tuple after change 140649480694592

Você pode ver no código acima que o primeiro elemento, que é uma lista, é mutável, enquanto a tupla é imutável. O valor da tupla não pode ser alterado, mas o conteúdo da lista presente dentro da tupla pode alterar seu valor.

Portanto, isso levanta uma exceção de que os objetos imutáveis ​​não mudam seu valor, mas o valor dos constituintes muda seu valor.

Objetos mutáveis ​​vs. imutáveis

Aqui estão as principais diferenças entre objetos mutáveis ​​e imutáveis:

Objeto mutável Objeto imutável
O estado do objeto pode ser alterado depois de criado O estado do objeto não pode ser alterado depois de criado
Objetos mutáveis ​​não são considerados de natureza segura para threads. Objetos imutáveis ​​são considerados de natureza segura para threads.
Os objetos mutáveis ​​não se tornam finais e, portanto, o programador pode continuar alterando objetos mutáveis ​​e usar os mesmos objetos. É fundamental tornar as classes finais quando há a criação do objeto imutável

Python Tipos de dados imutáveis

Aula Explicação Imutável ou não
boleano Valor booleano Imutável
int Valor inteiro (a magnitude pode ser arbitrária) Imutável
Float número de ponto flutuante Imutável
Lista Sequência de objetos de natureza mutável Mutável
Tupla Sequência de objetos de natureza imutável Imutável
Str Cadeia de caracteres Imutável
Conjunto conjunto de objetos distintos que são de natureza não ordenada Mutável
Conjunto congelado Definir classe de natureza imutável Imutável
Dito Dicionário ou mapeamento associativo Mutável

Resuma esta postagem com: