Oggetti mutabili e immutabili in Python

โšก Riepilogo intelligente

Oggetti mutabili e immutabili in Python Differiscono per il fatto che il loro stato cambi o meno dopo la creazione. I tipi mutabili, come liste e dizionari, cambiano sul posto, mentre i tipi immutabili, come stringhe e tuple, non possono.

  • ๐Ÿ”˜ Definizione: Un oggetto mutabile puรฒ cambiare il proprio valore sul posto, mentre un oggetto immutabile, una volta creato, non puรฒ farlo.
  • โ˜‘๏ธ Tipi mutabili: Liste, dizionari e insiemi possono essere modificati dopo la creazione senza generare un nuovo oggetto.
  • โœ… Tipi immutabili: I tipi di dati, come interi, numeri in virgola mobile, booleani, stringhe, tuple e frozenset, mantengono un valore fisso una volta inizializzati.
  • ๐Ÿ”‘ Tasti del dizionario: Solo oggetti immutabili e hashable possono fungere da chiavi, garantendo cosรฌ l'affidabilitร  delle ricerche.
  • ๐Ÿค– Rilevanza dell'IA: Gli array e i tensori dell'apprendimento automatico sono mutabili, quindi tracLa funzione di modifica in loco di King protegge la riproducibilitร .

Mutabile e immutabile in Python

Cos'รจ un oggetto mutabile?

Mutevole dentro Python puรฒ essere definito come l'oggetto che puรฒ cambiare o essere considerato come qualcosa di mutevole in natura. Mutevole significa la possibilitร  di modificare o modificare un valore.

Oggetti mutabili dentro Python consentire ai programmatori di avere oggetti che possono modificare i loro valori. Generalmente vengono utilizzati per archiviare una raccolta di dati. Puรฒ essere considerato come qualcosa che รจ mutato e lo stato interno applicabile all'oggetto รจ cambiato.

Cosa sono gli oggetti immutabili?

Oggetti immutabili in Python possono essere definiti come oggetti che non cambiano i loro valori e attributi nel tempo. Questi oggetti diventano permanenti una volta creati e inizializzati e costituiscono una parte critica delle strutture dati utilizzate in Python.

Python รจ usato nei numeri, tuple, stringhe, set congelati e classi definite dall'utente con alcune eccezioni. Non possono cambiare e i loro valori rimangono permanenti una volta inizializzati e quindi chiamati immutabili.

In Python, tutto รจ un oggetto

Nel Python linguaggio di programmazione, tutto puรฒ essere considerato come un oggetto comprendente liste, numeri interi e funzioni. Questa funzionalitร  puรฒ essere paragonata ad altri linguaggi di programmazione che supportano gli oggetti.

Questa funzionalitร  puรฒ essere verificata utilizzando a Python interprete come mostrato di seguito: โ€“

Python codice:

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))

Produzione:

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

Ulteriormente, Python fornisce una funzione incorporata denominata id che restituisce l'indirizzo dell'oggetto come presente nella memoria del Python linguaggio di programmazione.

Python codice:

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

Produzione:

the id of object is 9795360

Nel codice precedente, la funzione id con sintassi id(obj) fornisce l'indirizzo di obj in Python memoria. Qui c'รจ un oggetto chiamato z e ha un'assegnazione di 200. L'oggetto z viene quindi passato alla funzione id come id(z) e il Python fornisce l'indirizzo dell'oggetto come 9795360.

Oggetti mutabili dentro Python

In un oggetto mutabile, il valore dell'oggetto cambia in un periodo di tempo.

In questo esempio, abbiamo spiegato gli oggetti mutabili Python, e questo utilizza gli elenchi come applicazione di oggetti mutabili come mostrato di seguito: โ€“

Python Code:

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)

Produzione:

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

Come possiamo vedere nell'esempio sopra riportato, l'elenco mutabile in Python aveva valori di 1,2,3. Il primo elemento della lista mutabile viene cambiato da 1 a Guru99, e non crea un nuovo oggetto quando viene inizializzato un nuovo valore.

Qui possiamo usare il metodo id per utilizzarlo. Di seguito viene illustrato l'uso del metodo id per oggetti mutabili come mostrato di seguito: โ€“

Python Code:

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))

Uscita

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

La figura seguente illustra l'oggetto mutabile in Python come mostrato di seguito: โ€“

Oggetti mutabili dentro Python

Oggetti immutabili in Python

Oggetti immutabili in Python sono oggetti in cui le istanze non cambiano nel periodo. Le istanze immutabili di un tipo specifico, una volta create, non cambiano e questo puรฒ essere verificato utilizzando il metodo id di Python.

Prendiamo un esempio di oggetti di tipo intero in Python che illustra il concetto di oggetti immutabili in Python come mostrato di seguito: โ€“

Python Code:

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))

Uscita

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

Si potrebbe vedere sopra che c'รจ un cambiamento in "a". Studiamo come funziona il meccanismo:

  • Non vi รจ alcun cambiamento nel valore dell'oggetto quando si inizializza "a" con 344.
  • Viene invece creato un nuovo oggetto delimitato da "a".
  • L'altro oggetto assegnato come 244 non sarebbe piรน accessibile.
  • L'esempio precedente utilizzava un oggetto intero.

A a=244, viene creato un nuovo oggetto e si fa riferimento ad "a" come mostrato di seguito: โ€“

Oggetti immutabili in Python

Post usando a=344, c'รจ un nuovo oggetto referenziato con "a". Il seguente diagramma rappresenta lo stesso: โ€“

Oggetti immutabili in Python

Pertanto, ogni volta che avviene l'assegnazione di un nuovo valore al nome di tipo int, si verifica una modifica nell'associazione del nome con un altro oggetto. Lo stesso principio si allinea con le tuple, stringhe, float e booleano quindi definiti immutabili.

Implicazioni per le chiavi del dizionario Python

I dizionari possono essere definiti come raccolte ordinate che memorizzano i dati nel formato chiave e non consentono duplicati. I dizionari contengono una chiave a cui รจ allineata la coppia di valori corrispondente. Sono di tipo modificabile e il loro contenuto puรฒ essere modificato anche dopo l'inizializzazione e la creazione.

In ogni momento, la chiave punta a un elemento specifico alla volta. Le chiavi dei dizionari sono immutabili.

Prendiamo uno scenario ipotetico come mostrato di seguito: โ€“

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

Risultato: โ€“ Quanto sopra Python il codice non produce alcun output e genera invece un errore di tipo di tipo non hashable. Questa รจ una situazione ipotetica e non viene utilizzata in Python compilatore.

Qui, a รจ definito come [4,6] e nel dizionario รจ definito come x. Qui, b รจ definito come [5,6,7] e nel dizionario รจ definito come y.

  • La chiave "a" ha il valore [4,6] ed รจ ulteriormente inizializzata su x.
  • La chiave "b" ha il valore [5,6,7] che viene ulteriormente inizializzato su "y" in un dizionario.
  • Supponiamo ora che il valore di 'un' viene aggiunto con 5 e 7, che รจ una chiave per il dizionario.
  • Quindi il dizionario รจ stato modificato e fornirebbe entrambi 'X' and 'y' come valori per il dizionario di cui sopra.

Consideriamo lo scenario seguente come illustrato sopra: โ€“

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

Quindi, come linguaggio di programmazione, Python rende immutabili le chiavi del dizionario e i dizionari sono tipi di dati immutabili.

Eccezioni nell'immutabilitร 

Perรฒ, Python fornisce eccezioni all'immutabilitร , tali eccezioni possono essere osservate per il tipo di oggetto tupla. Una tupla puรฒ essere una combinazione di tipi di oggetto mutabili e immutabili. Facciamo un esempio per spiegare le eccezioni nell'immutabilitร  come mostrato di seguito: โ€“

Python Code:

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))

Produzione:

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

Puoi vedere nel codice sopra che il primo elemento, che รจ una lista, รจ mutabile, mentre la tupla รจ immutabile. Il valore della tupla non puรฒ essere modificato, ma il contenuto della lista presente all'interno della tupla puรฒ modificarne il valore.

Pertanto, ciรฒ solleva un'eccezione secondo cui gli oggetti immutabili non cambiano il loro valore, ma il valore dei costituenti cambia il loro valore.

Oggetti mutabili e oggetti immutabili

Ecco le principali differenze tra oggetti mutabili e immutabili:

Oggetto mutevole Oggetto immutabile
Lo stato dell'oggetto puรฒ essere modificato una volta creato Lo stato dell'oggetto non puรฒ essere modificato una volta creato
Gli oggetti mutabili non sono considerati di natura thread-safe. Gli oggetti immutabili sono considerati di natura thread-safe.
Gli oggetti mutabili non sono definitivi e quindi il programmatore puรฒ continuare a cambiare oggetti mutabili e utilizzare gli stessi oggetti. รˆ fondamentale rendere le classi definitive quando si verifica la creazione dell'oggetto immutabile

Python Tipi di dati immutabili

Classe Spiegazione Immutabile o no
Bool Valore booleano Immutabile
Int Valore intero (la grandezza puรฒ essere arbitraria) Immutabile
galleggiante Numero in virgola mobile Immutabile
Lista Sequenza di oggetti di natura mutevole Mutevole
tuple Sequenza di oggetti di natura immutabile Immutabile
Str Carattere/stringa Immutabile
Impostato insieme di oggetti distinti che sono di natura non ordinata Mutevole
Set congelato Imposta classe di natura immutabile Immutabile
dict Dizionario o mappa associativaping Mutevole

DOMANDE FREQUENTI

Le stringhe sono immutabili, quindi il loro hash rimane costante e funzionano come chiavi di un dizionario o come membri di un insieme. Metodi come replace() o upper() restituiscono una nuova stringa invece di modificare l'originale.

Le tuple sono immutabili quindi Python รˆ possibile eseguire l'hashing per ottenere chiavi di dizionario e proteggere i dati fissi da modifiche accidentali. Le liste rimangono mutabili perchรฉ sono progettate per collezioni che crescono o si riducono.

Un valore predefinito modificabile come def f(x, items=[]) รจ rischioso: Python Crea l'elenco una sola volta, quindi persiste tra le chiamate. Usa items=None, quindi assegna items = [] all'interno della funzione.

Utilizza il modulo copy: copy.copy() crea una copia superficiale che condivide gli oggetti annidati, mentre copy.deepcopy() duplica ogni livello. Anche lo slicing o list(original) producono una copia superficiale.

Un frozenset รจ la versione immutabile di un set. Non puรฒ acquisire o perdere elementi, quindi รจ hashable e puรฒ fungere da chiave di un dizionario o da elemento di un set.

Gli oggetti immutabili sono hashable, quindi funzionano come chiavi di dizionario e membri di insiemi. Sono thread-safe, piรน facili da analizzare e consentono ottimizzazioni come l'interning di numeri interi piccoli.

La scienza dei dati si basa su strutture mutabili: array NumPy, DataFrame di pandas e PyTorI tensori ch cambiano sul posto per velocizzare. Poichรฉ le pipeline di IA li condividono, track modifiche in loco per mantenere la riproducibilitร .

Sรฌ. GitHub Copilot e gli assistenti basati sull'IA segnalano gli argomenti predefiniti modificabili, suggeriscono la copia profonda (deepcopy) e raccomandano l'uso di tuple o frozenset per i dati costanti. RevEsaminate il loro output, poichรฉ i suggerimenti potrebbero non rilevare bug di mutazione in loco di lieve entitร .

Riassumi questo post con: