Pytonorm

Muterbar vs. Immutable Objects in Python

Muterbar vs. Immutable Objects in Python

Python sägs vara det mest fantastiska språket eftersom många individer väljer det som sitt första språk för programmering för sin elegans och enkelhet. Tacksamhet för dess breda gemenskap, överflöd av paket och konsekvent syntax, erfarna yrkesverksamma använder också Python. Även om det finns en sak som verkar irritera både nybörjare och vissa professionella utvecklare - objekt från Python.

Muterbar vs. Oföränderlig

Föränderlig enheter kan ändra deras tillstånd eller ämne att beskriva skillnaden, och oföränderlig enheter kan inte ändra sitt tillstånd eller ämne. Så när ett objekt skapas, ett special objekt-ID tilldelas. Vid körning anges typen av objekt och det kan inte uppdateras senare. Inbyggda former som variablerna int, float, bool, str, tuple och Unicode är oföränderliga. Objekt som lista, uppsättning, byte-matriser och ordlista för inbyggda kategorier är mutabla.

Förstå ID och typfunktion

Den integrerade id () metoden innehåller ett objekts id som bara ett heltal. Det heltalet refererar normalt till objektets lagringsposition. 'äroperatör relaterar identiteten hos två objekt till varandra. Den integrerade funktionen, typ(), returnerar typen av ett objekt. Jämför två variabler 'x'och'y', med samma värde, med jämställdhetsoperatör'x == y', kommer det att matas ut Sann. Använda id () -funktion, vi har jämfört minnesadresser av båda variablerna kommer den att matas ut Falsk eftersom båda variablerna är olika och ligger på olika minnesplatser, även om värdena de innehåller är desamma.

Gör en annan variabel 'z'som pekar på identisk enhet som'x'riktar till, med uppdragsoperatör'=''. Använda 'äroperatör har vi funnit att de båda pekar på samma objekt och har samma minnesadresser.

Oföränderliga variabeltyper

Låt oss titta på några oföränderliga variabeltyper.

Heltals datatyp

Låt oss definiera en variabel 'x"ha ett värde"10''. En inbyggd id () metod används för att ta reda på var 'x'i minnet och typ() används för att identifiera dess typ. När vi försöker ändra värdet på 'x', det har ändrats framgångsrikt, även om minnesadressen returnerar annorlunda. Det beror på att vi inte har ändrat värdet på 'x'men vi har skapat ett annat objekt med samma namn'x'och tilldela det ett annat värde. Vi har bundit namnet 'x'till det nya värdet. Nu när du ringer 'x'det kommer att mata ut det nya värdet.

Strängdatatyp

Samma för strängdatatypen, vi kan inte ändra den befintliga variabel men vi måste skapa en ny med samma namn. Här har vi definierat en strängvariabel 'x'och vill lägga till'w'till dess nollindex. Det kommer att matas ut Skrivfel, visar att strängobjektet inte stöder uppdatering.

Tuple DataType

Få en glimt av en tupeltyp variabel, vi har definierat a tupel med 4 värden. Vi har använt id () -funktion för att mata ut adressen. När vi vill ändra dess värde vid 0 index, det ger Skrivfel den tupeln stöder inte artikeltilldelning eller uppdatering.

Tvärtom kan du uppdatering hela tupeln genom att definiera den från repa. Nu, när du kontrollerar det, hittar du ett nytt värde och en ny adress.

Flyt DataType

Vi har en variabel av flytartyp 'x''. Använda id () -funktion, vi måste ta reda på dess adress. När vi vill ändra dess värde vid index 1, det ger Skrivfel som flyter inte stöder modifiering av objekt.

Omvänt har vi uppdaterat flyta genom att definiera det igen. Nu, när vi kallar det, hittar vi ett nytt värde och en ny adress.

Muterbara variabeltyper

Nu ska vi titta på några muterbara variabeltyper.

Lista datatyp

Vi har definierat en lista som heter 'x'och lägg till några värden till den. Medan springa, det visar listvärden. När du uppdatering listan genom att tilldela nya värden index 0 och 2, det kommer framgångsrikt att göra det.

Ovan beskrivna exempel är ett enkelt och grundläggande exempel på modifiering. För att kontrollera mutabilitet till en annan nivå, låt oss ta en titt på samma exempel med liten förändring. Vi har skapat ett nytt namn 'y'och bundna den till samma listobjekt. När vi kollade omx' är det samma som 'y', det returnerar sant. Å andra sidan, båda 'x'och'y' ha samma minne adresser.

Lägg nu till ett nytt värde till a listnamn 'x' och kontrollera den uppdaterade utdata.

Nu när du söker efter lista namn 'y', den kommer att visa samma lista som den visar för 'x'. Det betyder att när vi uppdaterar samma objektlista, som har två olika namn 'x' och 'y'. Båda är desamma och delar samma minnesadresser även efter modifieringen.

Ordbok DataType

Eftersom ordböcker ofta används variabler i Python, låt oss ta en titt på ordböckernas mutabilitet. Vi har definierat en ordbok som heter 'diktera'med tre nycklar och deras värden. När vi skriver ut det kommer det att visa allt innehåll i det. Du kan skriva ut varje ordboksvärde separat och använda deras knapparna istället för index.

Vi vill förändra det specifika värdet genom att uppdatera nyckel 'Namn'. Den matade ut den uppdaterade ordlistan. Ordbokstangenter är oföränderliga.

Låt oss definiera en lista och tupel separat. Se till att tupel måste ha en värde för listtyp i den och en lista har en värde för tupeltyp i det följaktligen.

A tupel har en lista på dess 0 index så när du byter på 0 index av en tuple, måste du nämna index av en lista där du vill ändra. Ändring sker eftersom listan är oföränderlig.

Tvärtom kan listvariabeln inte uppdateras eftersom den har en tupel0 index, vilket är muterbart.

Slutsats

Vi har sett variationer i Python mellan föränderliga och oföränderliga. Du måste göra dig uppmärksam på att allt i Python kallas ett objekt. Primärt är skillnaden mellan föremål som kan förändras vs. oföränderlig.

Topp 10 spel att spela på Ubuntu
Windows-plattformen har varit en av de dominerande plattformarna för spel på grund av den enorma andelen spel som utvecklas idag för att stödja Window...
5 bästa arkadspel för Linux
Numera är datorer seriösa maskiner som används för spel. Om du inte kan få den nya poängen vet du vad jag menar. I det här inlägget kommer du att känn...
Strid om Wesnoth 1.13.6 Utveckling släppt
Strid om Wesnoth 1.13.6 släpptes förra månaden, är den sjätte utvecklingsversionen i 1.13.x-serien och den levererar ett antal förbättringar, framför ...