I thought I had the whole list alias thing figured out, but then I came across this:
l = [1, 2, 3, 4]
for i in l:
i = 0
print(l)
which results in:
[1, 2, 3, 4]
So far so good.
However, when I tried this:
l = [[1, 2], [3, 4], [5, 6]]
for i in l:
i[0] = 0
I get
[[0, 2], [0, 4], [0, 5]]
Why is this?
Does this have to do with how deep aliasing goes?
The first rebinds the name. Rebinding a name changes only the local name. The second mutates the object. Mutating an object changes it everywhere it is referenced (since it's always the same object).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With