Muterbar og Uforanderlig i Python

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.

YouTube Video