Göm meny

Varför l += [1] inte är samma sak som l = l + [1]

När vi t.ex. använder operatorn + på två värden (objekt), t.ex. 1 + 2 så använder python den magiska metoden __add__(). En magisk metod är en metod som börjar och slutar på __, som t.ex. __init__(). De används automatiskt av Python vid olika tillfällen. Metoden __init__() används t.ex. när en ny instans av en klass skapas och metoden __add__() används när operatorn + ska appliceras på ett objekt (för inbyggda datatyper är standardbeteendet hårdkodat).

Det signifikanta här är att operatorn + använder sig av den magiska metoden __add__(), medan +=, uttökad tilldelning, använder sig av den magiska metoden __iadd__(). För listor, så skiljer sig __add__() från __iadd__() på så sätt att __iadd__() lägger till värdet till den existerande listan, medan __add__() skapar en ny lista.

Detta betyder att

1
2
3
4
l1 = ["a"]
l2 = l1
l1 += ["b"]
print(l2)

kommer att skriva ut ["a", "b"], medan

1
2
3
4
l1 = ["a"]
l2 = l1
l1 = l1 + ["b"]
print(l2)

kommer att skriva ut ["a"].


Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2019-02-18