Promjenjivi i nepromjenjivi objekti u Python

⚡ Pametni sažetak

Promjenjivi i nepromjenjivi objekti u Python razlikuju se po tome mijenja li se njihovo stanje nakon stvaranja. Promjenjivi tipovi poput popisa i rječnika mijenjaju se na mjestu, dok nepromjenjivi tipovi poput nizova znakova i n-torki ne mogu.

  • 🔘 Definicija: Promjenjivi objekt može promijeniti svoju vrijednost na mjestu, dok nepromjenjivi objekt ne može nakon što je kreiran.
  • ☑️ Promjenjivi tipovi: Popisi, rječnici i skupovi mogu se mijenjati nakon stvaranja bez stvaranja novog objekta.
  • ✅ Nepromjenjivi tipovi: Cijeli brojevi, brojevi s pomičnim zakretnim vektorom, logičke vrijednosti, stringovi, n-torke i zamrznuti skupovi zadržavaju fiksnu vrijednost nakon inicijalizacije.
  • 🔑 Ključevi rječnika: Samo nepromjenjivi, hashirani objekti mogu poslužiti kao ključevi, što osigurava pouzdanost pretraga.
  • 🤖 Relevantnost umjetne inteligencije: Nizovi i tenzori strojnog učenja su promjenjivi, dakle tracKingova uređivanje na licu mjesta štiti ponovljivost.

Promjenjivo i nepromjenjivo u Python

Što je promjenjivi objekt?

Promjenjiv u Python može se definirati kao objekt koji se može promijeniti ili se može smatrati nečim promjenjivim u prirodi. Promjenjivo znači mogućnost izmjene ili uređivanja vrijednosti.

Promjenjivi objekti u Python omogućiti programerima da imaju objekte koji mogu mijenjati svoje vrijednosti. Općenito se koriste za pohranjivanje zbirke podataka. Može se smatrati nečim što je mutiralo, a unutarnje stanje primjenjivo unutar objekta se promijenilo.

Što su nepromjenjivi objekti?

Nepromjenjivi objekti u Python mogu se definirati kao objekti koji s vremenom ne mijenjaju svoje vrijednosti i atribute. Ovi objekti postaju trajni nakon što se stvore i inicijaliziraju te čine ključni dio struktura podataka koje se koriste u Python.

Python koristi se u brojevima, torke, nizovi, zamrznuti skupovi i korisnički definirane klase uz neke iznimke. Ne mogu se mijenjati, a njihove vrijednosti ostaju trajne nakon što se inicijaliziraju i stoga se nazivaju nepromjenjivima.

In Python, sve je objekt

u Python programskog jezika, sve se može smatrati objektom koji sadrži popise, cijele brojeve i funkcije. Ova se značajka može usporediti s drugim programskim jezicima koji podržavaju objekte.

Ova se značajka može provjeriti pomoću a Python tumač kao što je prikazano u nastavku: –

Python kodirati:

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

Izlaz:

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

Unaprijediti, Python pruža ugrađenu funkciju pod nazivom id koja vraća adresu objekta koja je prisutna u memoriji Python programski jezik.

Python kodirati:

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

Izlaz:

the id of object is 9795360

U gornjem kodu, funkcija id koja ima sintaksu kao id(obj) daje adresu obj in Python memorija. Ovdje postoji objekt pod imenom z i ima dodjelu 200. Objekt z se zatim prosljeđuje u funkciju id kao id(z), a Python isporučuje adresu objekta kao 9795360.

Promjenjivi objekti u Python

U promjenjivom objektu, vrijednost objekta se mijenja tijekom određenog vremenskog razdoblja.

U ovom smo primjeru objasnili promjenjive objekte u Python, a ovo koristi popise kao primjenu promjenjivih objekata kao što je prikazano u nastavku: –

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)

Izlaz:

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

Kao što možemo vidjeti u gore navedenom primjeru, promjenjivi popis in Python imali su vrijednosti 1, 2, 3. Prvi element promjenjive liste mijenja se s 1 na Guru99 i ne stvara novi objekt kada se inicijalizira nova vrijednost.

Ovdje možemo koristiti id metodu da je iskoristimo. Sljedeće ilustrira upotrebu metode id za promjenjive objekte kao što je prikazano u nastavku: –

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

Izlaz

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

Sljedeća slika ilustrira promjenjivi objekt u Python kao što je prikazano u nastavku: –

Promjenjivi objekti u Python

Nepromjenjivi objekti u Python

Nepromjenjivi objekti u Python su objekti u kojima se instance ne mijenjaju tijekom razdoblja. Nepromjenjive instance određenog tipa, nakon što su stvorene, ne mijenjaju se, a to se može provjeriti korištenjem id metode Python.

Uzmimo primjer objekata cjelobrojnog tipa Python koji ilustrira koncept nepromjenjivih objekata u Python kao što je prikazano u nastavku: –

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

Izlaz

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

Gore se može vidjeti da postoji promjena u "a." Proučimo kako mehanizam funkcionira:

  • Nema promjene u vrijednosti objekta kada se inicijalizira "a" s 344.
  • Umjesto toga, kreira se novi objekt koji je omeđen s "a."
  • Drugi objekt dodijeljen kao 244 više ne bi bio dostupan.
  • Gornji primjer koristio je cjelobrojni objekt.

Na a=244 kreira se novi objekt i upućuje na "a" kao što je prikazano u nastavku: –

Nepromjenjivi objekti u Python

Post koristeći a=344, postoji novi objekt referenciran s "a". Sljedeći dijagram predstavlja isto: –

Nepromjenjivi objekti u Python

Stoga, kad god dođe do dodjele nove vrijednosti imenu tipa int, dolazi do promjene u vezivanju imena s drugim objektom. Isti princip je usklađen s torkama, žice, float i Boolean stoga se nazivaju nepromjenjivim.

Implikacije za ključeve rječnika Python

Rječnici se mogu definirati kao uređene zbirke koje pohranjuju podatke u formatu ključa i ne dopuštaju duplikate. Rječnici sadrže jedan ključ koji ima odgovarajući par vrijednosti usklađen s njim. Oni su promjenjivi u tipovima, a njihov sadržaj se može mijenjati čak i nakon njihove inicijalizacije i stvaranja.

U svakom trenutku ključ pokazuje na jedan po jedan element. Ključevi rječnika su nepromjenjivi.

Uzmimo hipotetski scenarij kao što je prikazano u nastavku: –

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

Ishod: – Gore navedeno Python kod ne daje nikakav izlaz, već umjesto toga generira pogrešku tipa tipa koji se ne može hashirati. Ovo je hipotetska situacija i ne koristi se u Python sastavljač.

Ovdje, a je definiran kao [4,6], au rječniku je definiran kao x. Ovdje, b je definiran kao [5,6,7], au rječniku je definiran kao y.

  • Ključ 'a' ima vrijednost [4,6] i dalje se inicijalizira na x.
  • Ključ 'b' ima vrijednost [5,6,7] koja se dalje inicijalizira u 'y' u rječniku.
  • Sada pretpostavimo da je vrijednost 'a” dodaje se s 5 i 7, što je ključ za rječnik.
  • Onda je rječnik mutiran, i dao bi oboje 'x' i 'y' kao vrijednosti za gornji rječnik.

Razmotrite sljedeći scenarij kao što je prikazano gore: –

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

Stoga, kao programski jezik, Python čini ključeve rječnika nepromjenjivima, a rječnici su nepromjenjivi tipovi podataka.

Iznimke u nepromjenjivosti

Međutim, Python pruža iznimke od nepromjenjivosti takve iznimke mogu se uočiti za tip objekta tuple. Torka može biti kombinacija promjenjivih i nepromjenjivih tipova objekata. Uzmimo primjer da objasnimo iznimke u nepromjenjivosti kao što je prikazano u nastavku: –

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

Izlaz:

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

U gornjem kodu možete vidjeti da je prvi element, koji je lista, promjenjiv, dok je tuple nepromjenjiv. Vrijednost tuple ne može se promijeniti, ali sadržaj popisa unutar tuple može promijeniti njezinu vrijednost.

Dakle, ovo dovodi do iznimke da nepromjenjivi objekti ne mijenjaju svoju vrijednost, ali vrijednost konstituenata mijenja svoju vrijednost.

Promjenjivi vs. nepromjenjivi objekti

Evo glavnih razlika između promjenjivih i nepromjenjivih objekata:

Promjenjivi objekt Nepromjenjivi objekt
Stanje objekta se može promijeniti nakon što je kreiran Stanje objekta se ne može promijeniti kada se jednom kreira
Promjenjivi objekti po prirodi se ne smatraju niti sigurnima. Nepromjenjivi objekti po prirodi se smatraju niti sigurnima.
Promjenjivi objekti nisu konačni, pa stoga programer može nastaviti mijenjati promjenjive objekte i koristiti iste objekte. Ključno je učiniti klase konačnima kada postoji stvaranje nepromjenjivog objekta

Python Nepromjenjivi tipovi podataka

Klasa Objašnjenje Nepromjenjivo ili ne
Bool Booleova vrijednost nepromjenljiv
Int Cijela vrijednost (veličina može biti proizvoljna) nepromjenljiv
Plutati Broj s pomičnim zarezom nepromjenljiv
Popis Niz objekata promjenjive prirode promjenljiv
torka Niz objekata nepromjenjive prirode nepromjenljiv
Str Znak / niz nepromjenljiv
Postaviti skup različitih objekata koji su neuređene prirode promjenljiv
Frozenset Klasa skupa nepromjenjive prirode nepromjenljiv
dict Rječnik ili asocijativna kartaping promjenljiv

Pitanja i odgovori

Nizovi su nepromjenjivi, pa njihov hash ostaje konstantan i funkcioniraju kao ključevi rječnika ili članovi skupa. Metode poput replace() ili upper() vraćaju novi niz umjesto uređivanja izvornog.

Torke su nepromjenjive, stoga Python može ih hashirati za ključeve rječnika i zaštititi fiksne podatke od slučajnih promjena. Popisi ostaju promjenjivi jer su izgrađeni za kolekcije koje rastu ili se smanjuju.

Promjenjiva zadana vrijednost kao što je def f(x, items=[]) je rizična: Python stvara popis jednom, tako da traje kroz pozive. Koristite items=None, a zatim dodijelite items = [] unutar funkcije.

Koristite modul za kopiranje: copy.copy() stvara plitku kopiju koja dijeli ugniježđene objekte, dok copy.deepcopy() duplicira svaku razinu. Slicing ili list(original) također daje plitku kopiju.

Zamrznuti skup je nepromjenjiva verzija skupa. Ne može dobivati ​​ili gubiti elemente, pa se može raspršiti i može poslužiti kao ključ rječnika ili element skupa.

Nepromjenjivi objekti se mogu hashirati, pa funkcioniraju kao ključevi rječnika i članovi skupa. Sigurni su za korištenje u više niti, lakši za razmišljanje i omogućuju optimizacije poput interniranja malih cijelih brojeva.

Znanost o podacima oslanja se na promjenjive strukture: NumPy nizove, pandas DataFrames i PyTorch tenzori se mijenjaju na mjestu radi brzine. Budući da ih AI cjevovodi dijele, track uređivanja na licu mjesta kako bi se osigurala ponovljivost.

Da. GitHub Copilot i AI asistenti označavaju promjenjive zadane argumente, predlažu duboko kopiranje i preporučuju n-torke ili zamrznute skupove za konstantne podatke. Revpregledajte njihov izlaz, budući da prijedlozi mogu propustiti suptilne greške mutacije na mjestu.

Sažmite ovu objavu uz: