Mutable och Immutable datatyper i Python
En datatyp har egenskapen mutable eller immutable (föränderlig eller 0föränderlig). Det innebär att vissa datatyper kan förändras efter skapandet, medans andra inte kan.
Vad innebär det att en datatyp är mutable eller immutable?
En mutable (förändlig) datatyp är möjlig att ändra på efter initieringen medans en immutable (oförändling) datatyp inte går att ändra på.
Några exempel på datatyper som är mutable är:
och några exempel på datatyper som är immutable är:
- Int
- Booleans
- String
- Tuple
- Float
Varje variabel har en minnesadress, som är ett sätt för datorn att lagra data för senare åtkomst.
Exempelvis om vi definerar en int, som är en immutable datatyp:
a = 10
så har den adressen
print(hex(id(a)))
0x10daa2680
Definerar vi sedan en till variabel med samma värde, kommer denna variabel att få samma minnesadress:
b = 10
print(hex(id(b)))
0x10daa2680
Eftersom ints är immutable, kan inte denna adressen ändras, vilket innebär att om vi ändrar värde på variabeln, kommer också adressen ändras:
a = 12
print(hex(id(a)))
0x10daa26c0
Men detta beteende kommer inte vara samma för en mutable datatyp. Ta exempelvis listor, som är mutable:
a = [1, 2, 3, 4, 5]
b = a;
print(hex(id(a)))
print(hex(id(b)))
0x10ffcc4c8
0x10ffcc4c8
I detta fall delar a och b samma minnesadress. Detta innebär att om ett värde ändras i a, kommer även värdet ändras i b:
a[3] = 10
print(a)
print(b)
print(hex(id(a)))
print(hex(id(b)))
[1, 2, 3, 10, 5]
[1, 2, 3, 10, 5]
0x10ffcc4c8
0x10ffcc4c8
Eftersom a och b delar samma minnesadress, innebär det att om ett värde ändras i a, kommer det även ändras i b! Observera alltså att minnesadressen är samma som före ändringen för mutable datatyper.