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: