Muterbar og Uforanderlig i Python
Denne artikkelen forklarer muterbare og uforanderlige objekter i Python.
YouTube Video
Muterbar og Uforanderlig i Python
"Muterbar" og "uforanderlig" refererer til muligheten for å endre et objekt. Å forstå dette hjelper med å unngå uventede feil og effektiv minnehåndtering.
Hva er Muterbar?
Muterbare objekter kan endre sin interne tilstand etter opprettelse.
Hovedtyper av Muterbare Data
list
dict
set
- Brukerdefinerte klasser (hvis deres attributter kan endres)
Eksempel: Endring av en Liste
1numbers = [1, 2, 3]
2numbers[0] = 100
3print(numbers) # [100, 2, 3]
En liste er et muterbart objekt, og elementene kan endres fritt.
Hva er Uforanderlig?
Uforanderlige objekter kan ikke endres etter at de er opprettet. Forsøk på å endre dem resulterer i opprettelsen av et nytt objekt.
Hovedtyper av Uforanderlige Data
int
float
str
tuple
bool
frozenset
Eksempel: Endring av en Streng
1text = "hello"
2# text[0] = "H" # TypeError: 'str' object does not support item assignment
3
4text = "H" + text[1:] # Creates a new string
5print(text) # "Hello"
Strenger er uforanderlige, så du kan ikke endre dem delvis.
Sammenligning av Muterbar og Uforanderlig
1# Mutable example
2a = [1, 2, 3]
3b = a
4b[0] = 100
5print(a) # [100, 2, 3] -> a is also changed
6
7# Immutable example
8x = 10
9y = x
10y = 20
11print(x) # 10 -> x is unchanged
Som vist i eksempelet ovenfor, deles muterbare objekter ved referanse, så de kan påvirke andre variabler. På den annen side, ubrytelige objekter oppretter nye instanser ved tildeling på nytt, og etterlater den opprinnelige verdien uberørt.
Undersøke intern atferd ved hjelp av id()
I Python kan du bruke id()
-funksjonen for å sjekke et objekts ID. Objektets ID er lik en minneadresse.
1# Immutable int behavior
2a = 10
3print(id(a)) # e.g., 140715920176592
4a += 1
5print(id(a)) # e.g., 140715920176624 -> ID has changed
6
7# Mutable list behavior
8b = [1, 2, 3]
9print(id(b)) # e.g., 2819127951552
10b.append(4)
11print(id(b)) # Same ID -> only the content has changed
Som vist, et nytt objekt opprettes for uforanderlige typer, mens foranderlige typer endres direkte på stedet.
Funksjoner og forsiktighet med endringsbare og ubrytelige objekter
Når et endringsbart objekt sendes til en funksjon, kan de opprinnelige dataene bli endret.
Eksempel: En funksjon som endrer en liste
1def modify_list(lst):
2 lst.append(100)
3
4my_list = [1, 2, 3]
5modify_list(my_list)
6print(my_list) # [1, 2, 3, 100]
Eksempel: En funksjon som endrer et tall
På den annen side, resulterer et forsøk på å endre et ubrytelige objekt i at et nytt objekt opprettes.
1def modify_number(n):
2 n += 10
3
4my_number = 5
5modify_number(my_number)
6print(my_number) # 5 -> unchanged
Praktiske hensyn
Unngå å bruke endringsbare objekter som standardargumenter
1# Bad example
2def add_item(item, container=[]):
3 container.append(item)
4 return container
5
6print(add_item(1)) # [1]
7print(add_item(2)) # [1, 2] -> unintended behavior
8
9# Good example
10def add_item(item, container=None):
11 if container is None:
12 container = []
13 container.append(item)
14 return container
Siden standardargumenter evalueres kun én gang når funksjonen defineres, kan bruk av endringsbare objekter føre til uventede bivirkninger.
Sammendrag
For å forstå Pythons variabler og datatyper på et dypere nivå, er det avgjørende å forstå forskjellene mellom endringsbare og ubrytelige objekter. Å forstå disse egenskapene hjelper deg med å unngå utilsiktet atferd i koden din og skrive mer robuste og lesbare programmer.
Du kan følge med på artikkelen ovenfor ved å bruke Visual Studio Code på vår YouTube-kanal. Vennligst sjekk ut YouTube-kanalen.