Foranderlige og uforanderlige objekter i Python

โšก Smart opsummering

Foranderlige og uforanderlige objekter i Python varierer i, om deres tilstand รฆndrer sig efter oprettelsen. Foranderlige typer som lister og ordbรธger รฆndrer sig pรฅ plads, mens uforanderlige typer som strenge og tupler ikke kan.

  • ๐Ÿ”˜ Definition: Et foranderligt objekt kan รฆndre sin vรฆrdi pรฅ stedet, mens et uforanderligt objekt ikke kan, nรฅr det fรธrst er oprettet.
  • โ˜‘๏ธ Foranderlige typer: Lister, ordbรธger og sรฆt kan รฆndres efter oprettelse uden at der oprettes et nyt objekt.
  • โœ… Uforanderlige typer: Heltal, flydende tal, booleske tal, strenge, tupler og frozensets beholder en fast vรฆrdi, nรฅr de er initialiseret.
  • ๐Ÿ”‘ Ordbogsnรธgler: Kun uforanderlige, hashbare objekter kan fungere som nรธgler, hvilket holder opslag pรฅlidelige.
  • ๐Ÿค– AI-relevans: Maskinlรฆringsarrays og tensorer er muterbare, sรฅ tracKing in-place redigeringer beskytter reproducerbarheden.

Foranderlig og uforanderlig i Python

Hvad er et foranderligt objekt?

Foranderlig i Python kan defineres som det objekt, der kan รฆndre sig eller betragtes som noget foranderligt i naturen. Mutable betyder evnen til at รฆndre eller redigere en vรฆrdi.

Foranderlige objekter i Python gรธre det muligt for programmรธrer at have objekter, der kan รฆndre deres vรฆrdier. De bruges generelt til at gemme en samling af data. Det kan betragtes som noget, der har muteret, og den interne tilstand, der er gรฆldende i et objekt, har รฆndret sig.

Hvad er uforanderlige objekter?

Uforanderlige objekter i Python kan defineres som objekter, der ikke รฆndrer deres vรฆrdier og attributter over tid. Disse objekter bliver permanente, nรฅr de er oprettet og initialiseret, og de udgรธr en kritisk del af datastrukturer, der bruges i Python.

Python bruges i tal, tupler, strenge, frosne sรฆt og brugerdefinerede klasser med nogle undtagelser. De kan ikke รฆndre sig, og deres vรฆrdier og det forbliver permanente, nรฅr de fรธrst er initialiseret og derfor kaldet uforanderlige.

In Python, alt er et objekt

I Python programmeringssprog, kan alt betragtes som et objekt bestรฅende af lister, heltal og funktioner. Denne funktion kan sammenlignes med andre programmeringssprog, der understรธtter objekter.

Denne funktion kan verificeres ved hjรฆlp af en Python tolk som vist nedenfor: โ€“

Python kode:

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

Output:

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

Endvidere, Python giver en indbygget funktion ved navn id, der returnerer objektets adresse som til stede i hukommelsen af Python programmeringssprog.

Python kode:

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

Output:

the id of object is 9795360

I ovenstรฅende kode giver id-funktionen med syntaks som id(obj) adressen pรฅ obj in Python hukommelse. Her er der et objekt ved navn z, og det har en tildeling pรฅ 200. Objektet z overfรธres derefter til id-funktionen som id(z), og Python leverer objektets adresse som 9795360.

Foranderlige objekter i Python

I et foranderligt objekt รฆndres objektets vรฆrdi over en periode.

I dette eksempel har vi forklaret foranderlige objekter i Python, og dette bruger lister som en anvendelse af foranderlige objekter som vist nedenfor: โ€“

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)

Output:

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

Som vi kan se i det ovenfor givne eksempel, er den foranderlige liste i Python havde vรฆrdier pรฅ 1, 2, 3. Det fรธrste element i den foranderlige liste รฆndres fra 1 til Guru99, og den opretter ikke et nyt objekt, nรฅr en ny vรฆrdi initialiseres.

Her kan vi bruge id-metoden til at bruge den. Det fรธlgende illustrerer brugen af โ€‹โ€‹id-metoden til mutable objekter som vist nedenfor: โ€“

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

Produktion

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

Fรธlgende figur illustrerer det foranderlige objekt i Python som vist nedenfor: -

Foranderlige objekter i Python

Uforanderlige objekter i Python

Uforanderlige objekter i Python er objekter, hvor forekomsterne ikke รฆndrer sig i lรธbet af perioden. Uforanderlige forekomster af en bestemt type รฆndres ikke, nรฅr de er oprettet, og dette kan verificeres ved hjรฆlp af id-metoden Python.

Lad os tage et eksempel pรฅ heltalsobjekter i Python der illustrerer begrebet uforanderlige objekter i Python som vist nedenfor: -

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

Produktion

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

Det kunne ses ovenfor, at der er รฆndring i "a." Lad os studere, hvordan mekanismen virker:

  • Der er ingen รฆndring i objektets vรฆrdi, nรฅr initialiseringen af โ€‹โ€‹"a" med 344.
  • I stedet oprettes et nyt objekt og er afgrรฆnset med "a."
  • Det andet objekt tildelt som 244 ville ikke lรฆngere vรฆre tilgรฆngeligt.
  • Ovenstรฅende eksempel brugte et heltalsobjekt.

Ved a=244 oprettes et nyt objekt og refereres til "a" som vist nedenfor: โ€“

Uforanderlige objekter i Python

Indlรฆg med a=344, der er et nyt objekt, der henvises til med "a". Fรธlgende diagram reprรฆsenterer det samme: -

Uforanderlige objekter i Python

Derfor, nรฅr der er tildeling af en ny vรฆrdi til navnet pรฅ int-typen, er der en รฆndring i bindingen af โ€‹โ€‹navnet med et andet objekt. Det samme princip stemmer overens med tupler, strygere, float og boolsk og derfor betegnet uforanderlig.

Implikationer for ordbogsnรธgler ind Python

Ordbรธger kan defineres som de ordnede samlinger, der gemmer data i nรธgleformatet og ikke tillader dubletter. Ordbรธger indeholder รฉn nรธgle, som har tilsvarende vรฆrdipar justeret til sig. De kan รฆndres i typer, og deres indhold kan รฆndres selv efter deres initialisering og oprettelse.

Pรฅ ethvert tidspunkt peger nรธglen pรฅ รฉt specifikt element ad gangen. Nรธglerne til ordbรธger er uforanderlige.

Lad os tage et hypotetisk scenarie som vist nedenfor: -

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

Output: โ€“ Ovenstรฅende Python kode giver ikke noget output, og i stedet genererer den en typefejl af uhashbar type. Dette er en hypotetisk situation og bruges ikke i Python compiler

Her, a er defineret som [4,6], og i ordbogen er det defineret som x. Her, b er defineret som [5,6,7], og i ordbogen er det defineret som y.

  • Nรธglen 'a' har vรฆrdien [4,6], og den initialiseres yderligere til x.
  • Nรธglen 'b' har vรฆrdien [5,6,7], som yderligere initialiseres til 'y' i en ordbog.
  • Antag nu, at vรฆrdien af โ€‹โ€‹'en' er tilfรธjet 5 og 7, som er en nรธgle til ordbogen.
  • Sรฅ er ordbogen blevet muteret, og den ville give begge dele 'x' og 'y' som vรฆrdier for ovenstรฅende ordbog.

Overvej fรธlgende scenarie som illustreret ovenfor: โ€“

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

Derfor, som et programmeringssprog, Python gรธr ordbogens nรธgler uforanderlige, og ordbรธger er uforanderlige datatyper.

Undtagelser i uforanderlighed

Imidlertid Python giver undtagelser til uforanderlighed. Sรฅdanne undtagelser kan observeres for tuple-objekttypen. En tupel kan vรฆre en kombination af foranderlige og uforanderlige objekttyper. Lad os tage et eksempel for at forklare undtagelserne i uforanderlighed som vist nedenfor: -

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

Output:

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

Du kan se i ovenstรฅende kode, at det fรธrste element, som er en liste, kan รฆndres, mens tuple er uforanderlig. Vรฆrdien af โ€‹โ€‹tuplen kan ikke รฆndres, men indholdet af listen, der findes inde i tuplen, kan รฆndre dens vรฆrdi.

Derfor rejser dette en undtagelse, at de uforanderlige objekter ikke รฆndrer deres vรฆrdi, men vรฆrdien af โ€‹โ€‹bestanddele รฆndrer deres vรฆrdi.

Foranderlige vs. uforanderlige objekter

Her er store forskelle mellem foranderlige og uforanderlige objekter:

Foranderligt objekt Uforanderligt objekt
Objekttilstanden kan รฆndres, nรฅr den er oprettet Objekttilstanden kan ikke รฆndres, nรฅr fรธrst den er oprettet
Foranderlige objekter anses ikke for at vรฆre trรฅdsikre. Uforanderlige genstande betragtes som trรฅdsikre i naturen.
De foranderlige objekter gรธres ikke endelige, og derfor kan programmรธren blive ved med at รฆndre foranderlige objekter og bruge de samme objekter. Det er afgรธrende at gรธre klasserne endelige, nรฅr der er skabelsen af โ€‹โ€‹det uforanderlige objekt

Python Uforanderlige datatyper

Klasse Forklaring Uforanderlig eller ej
Bool boolsk vรฆrdi uforanderlige
Int Heltalsvรฆrdi (stรธrrelsen kan vรฆre vilkรฅrlig) uforanderlige
Flyde Flydende kommanummer uforanderlige
Liste Rรฆkkefรธlge af objekter af foranderlig natur Omskiftelig
Tuple Sekvens af genstande af uforanderlig natur uforanderlige
Str Tegn /streng uforanderlige
sรฆt sรฆt af distinkte objekter, der er af uordnet karakter Omskiftelig
Frosset Sรฆt klasse af uforanderlig natur uforanderlige
Dikt Ordbog eller associativt kortping Omskiftelig

Ofte Stillede Spรธrgsmรฅl

Strenge er uforanderlige, sรฅ deres hash forbliver konstant, og de fungerer som ordbogsnรธgler eller sรฆtmedlemmer. Metoder som replace() eller upper() returnerer en ny streng i stedet for at redigere originalen.

Tupler er uforanderlige, sรฅ Python kan hashe dem til ordbogsnรธgler og beskytte faste data mod utilsigtet รฆndring. Lister forbliver foranderlige, fordi de er bygget til samlinger, der vokser eller krymper.

En foranderlig standardvรฆrdi sรฅsom def f(x, items=[]) er risikabel: Python opretter listen รฉn gang, sรฅ den bevares pรฅ tvรฆrs af kald. Brug items=None, og tildel derefter items = [] i funktionen.

Brug kopimodulet: copy.copy() laver en overfladisk kopi, der deler indbyggede objekter, mens copy.deepcopy() duplikerer alle niveauer. Slicing eller list(original) giver ogsรฅ en overfladisk kopi.

Et frozenset er den uforanderlige version af et sรฆt. Det kan ikke tilegne sig eller miste elementer, sรฅ det er hashbart og kan fungere som en ordbogsnรธgle eller et sรฆtelement.

Uforanderlige objekter kan hashes, sรฅ de fungerer som ordbogsnรธgler og sรฆtmedlemmer. De er trรฅdsikre, nemmere at rรฆsonnere rundt om og muliggรธr optimeringer som internering af smรฅ heltal.

Datavidenskab er afhรฆngig af muterbare strukturer: NumPy-arrays, pandas DataFrames og PyTorch-tensorer รฆndrer sig pรฅ plads for hastighed. Da AI-pipelines deler dem, track pรฅ stedet-redigeringer for at forblive reproducerbare.

Ja. GitHub Copilot og AI-assistenter markerer รฆndrbare standardargumenter, foreslรฅr deepcopy og anbefaler tupler eller frozensets til konstante data. Revse deres output, da forslag kan overse subtile mutationsfejl pรฅ stedet.

Opsummer dette indlรฆg med: