Proměnlivé a neměnné objekty v Python {EXAMPLES}

Co je to proměnlivý objekt?

Proměnlivé v Python lze definovat jako objekt, který se může změnit nebo být považován za něco proměnlivého v přírodě. Proměnlivý znamená možnost upravit nebo upravit hodnotu.

Proměnlivé objekty v Python umožnit programátorům mít objekty, které mohou měnit jejich hodnoty. Obecně se používají k ukládání kolekce dat. Lze to považovat za něco, co zmutovalo a vnitřní stav platný v objektu se změnil.

Co jsou neměnné předměty?

Neměnné předměty v Python lze definovat jako objekty, které v průběhu času nemění své hodnoty a atributy.
Tyto objekty se po vytvoření a inicializaci stanou trvalými a tvoří kritickou část datových struktur používaných v Python.

Python se používá v číslech, n-tice, řetězce, zmrazené sady a uživatelem definované třídy s některými výjimkami. Nemohou se změnit a jejich hodnoty a zůstávají trvalé, jakmile jsou inicializovány, a proto se nazývají neměnné.

In Python, všechno je objekt

v Python vše lze považovat za objekt obsahující seznamy, celá čísla a funkce. Tato vlastnost je srovnatelná s jinými programovacími jazyky, které podporují objekty.

Tuto vlastnost lze ověřit pomocí a Python tlumočník, jak je znázorněno níže: –

Python kód:

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

Výstup:

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

Dále, Python poskytuje vestavěnou funkci s názvem id, která vrací adresu objektu tak, jak je přítomna v paměti Python programovací jazyk.

Python kód:

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

Výstup:

the id of object is 9795360

Ve výše uvedeném kódu funkce id se syntaxí jako id(obj) udává adresu obj in Python paměť. Zde je objekt s názvem z a má přiřazení 200. Objekt z je pak předán do funkce id jako id(z) a Python doručuje adresu objektu jako 9795360.

Proměnlivé objekty v Python

U proměnlivého objektu se hodnota objektu v průběhu času mění.

V tomto příkladu jsme vysvětlili měnitelné objekty v Python, a to využívá seznamy jako aplikaci proměnných objektů, jak je uvedeno níže: –

Python Kód:

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)

Výstup:

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

Jak můžeme vidět na výše uvedeném příkladu, proměnlivý seznam v Python měl hodnoty 1,2,3. První prvek proměnlivého seznamu se změní z 1 na Guru99 a nevytváří nový objekt, když je inicializována nová hodnota.

Zde můžeme použít metodu id. Níže je znázorněno použití metody id pro měnitelné objekty: –

Python Kód:

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

Výstup

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

Následující obrázek ilustruje proměnlivý objekt v Python jak je uvedeno níže: –

Proměnlivé objekty v Python

Neměnné předměty v Python

Neměnné předměty v Python jsou objekty, jejichž instance se v průběhu období nemění. Neměnné instance určitého typu se po vytvoření nemění, což lze ověřit pomocí metody id Python.

Vezměme si příklad objektů typu integer v Python který ilustruje koncept neměnných objektů v Python jak je uvedeno níže: –

Python Kód:

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

Výstup

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

Výše bylo vidět, že došlo ke změně v „a“. Pojďme studovat, jak mechanismus funguje:

  • Při inicializaci „a“ s 344 se hodnota objektu nezmění.
  • Místo toho je vytvořen nový objekt, který je ohraničen „a“.
  • Druhý objekt přiřazený jako 244 by již nebyl přístupný.
  • Výše uvedený příklad používal objekt typu celé číslo.

Při a=244 se vytvoří nový objekt a odkazuje se na „a“, jak je znázorněno níže: –

Neměnné předměty v Python

Příspěvek pomocí a=344, existuje nový objekt odkazovaný s „a“. Následující diagram znázorňuje totéž: -

Neměnné předměty v Python

Kdykoli tedy dojde k přiřazení nové hodnoty názvu typu int, dojde ke změně vazby názvu s jiným objektem. Stejný princip je v souladu s n-ticemi, řetězce, float a Boolean se proto nazývají neměnné.

Důsledky pro klíče slovníku Python

Slovníky lze definovat jako uspořádané kolekce, které ukládají data ve formátu klíče a neumožňují duplikáty. Slovníky obsahují jeden klíč, ke kterému je přiřazen odpovídající pár hodnot. Jsou typově proměnlivé a jejich obsah lze měnit i po jejich inicializaci a vytvoření.

V každém okamžiku klíč ukazuje vždy na jeden konkrétní prvek. Klíče slovníků jsou neměnné.

Vezměme si hypotetický scénář, jak je ukázáno níže: –

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

Výstup: – Výše ​​uvedený Python kód nepřináší žádný výstup a místo toho generuje typovou chybu nehašovatelného typu. Toto je hypotetická situace a nepoužívá se Python překladač

Zde, a je definováno jako [4,6] a ve slovníku je definováno jako x. Tady, b je definováno jako [5,6,7] a ve slovníku je definováno jako y.

  • Klíč 'a' má hodnotu [4,6] a dále je inicializován na x.
  • Klíč 'b' má hodnotu [5,6,7], která je dále inicializována na 'y' ve slovníku.
  • Nyní předpokládejme, že hodnota 'A' je připojena 5 a 7, což je klíč pro slovník.
  • Pak byl slovník zmutován a dal by obojí 'X' si 'y' jako hodnoty pro výše uvedený slovník.

Zvažte následující scénář, jak je znázorněno výše: –

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

Proto jako programovací jazyk, Python dělá klíče slovníku neměnnými a slovníky jsou neměnné datové typy.

Výjimky v neměnnosti

Nicméně, Python poskytuje výjimky neměnnosti, takové výjimky lze pozorovat u typu objektu n-tice. N-tice může být kombinací proměnných a neměnných typů objektů. Vezměme si příklad pro vysvětlení výjimek v neměnnosti, jak je uvedeno níže: –

Python Kód:

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

Výstup:

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

Ve výše uvedeném kódu můžete vidět, že první prvek, kterým je seznam, je proměnlivý, zatímco n-tice je neměnný. Hodnotu n-tice nelze změnit, ale obsah seznamu uvnitř n-tice může změnit její hodnotu.

Proto to vyvolává výjimku, že neměnné objekty svou hodnotu nemění, ale hodnota složek mění svou hodnotu.

Proměnlivé vs. Neměnné objekty

Zde jsou hlavní rozdíly mezi proměnlivými a neměnnými objekty:

Proměnlivý objekt Neměnný objekt
Stav objektu lze po vytvoření změnit Stav objektu nelze po vytvoření změnit
Proměnlivé objekty nejsou ve své podstatě považovány za bezpečné pro vlákna. Neměnné objekty jsou ve své podstatě považovány za bezpečné pro vlákna.
Proměnlivé objekty nejsou konečné, a proto programátor může měnit proměnlivé objekty a používat stejné objekty. Je důležité, aby byly třídy konečné, když dojde k vytvoření neměnného objektu

Python Neměnné datové typy

Třída Vysvětlení Neměnné nebo ne
Bool Booleovská hodnota Nemožné
Int Celočíselná hodnota (velikost může být libovolná) Nemožné
Plovák Číslo s plovoucí desetinnou čárkou Nemožné
Seznam Posloupnost objektů proměnlivé povahy Proměnlivý
Tuple Posloupnost objektů neměnné povahy Nemožné
Str Znak / řetězec Nemožné
sada soubor odlišných objektů, které mají neuspořádanou povahu Proměnlivý
Frozenset Nastavit třídu neměnné povahy Nemožné
Dikt Slovníkové nebo asociativní mapování Proměnlivý

Shrňte tento příspěvek takto: