A hard exercise to help build the right mental model for Python data.
- Solution: https://memory-graph.com/#codeurl=https%3A%2F%2Fraw.githubusercontent.com%2Fbterwijn%2Fmemory_graph_videos%2Frefs%2Fheads%2Fmain%2Fexercises%2Fexercise26.py&play=
- Explanation: https://github.com/bterwijn/memory_graph?tab=readme-ov-file#python-data-model
The “Solution” link visualizes execution and reveals what’s actually happening using 𝗺𝗲𝗺𝗼𝗿𝘆_𝗴𝗿𝗮𝗽𝗵: https://github.com/bterwijn/memory_graph


I think the confusion comes from
a += bbeing equivalent toa = a + bfor immutable types, so some people generalize that incorrectly to mutable types too. Otherwise I think it’s pretty cleara += bmutatesa, anda = a + bfirst computesa + band then reassigns that toaso that its identity changes, just like inc = a + b.If you implement these operations in a class you have to implement each dunder,
__iadd__(self, other)and__add__(self, other)separately, same thing in C++.It is only clear if you already have a model of how labels work in Python and while it is understandable to me now, I wouldn’t say this is anything I would expect
Then again, shadowing variables is allowed in other languages and is also a source of confusion and mistakes at times
The point of the visualization at the Solution link is precisely to help people get the right model of how labels and the data model in general works in Python. See the Explanation link for more details.
Yeah, the visualisation is great, that is for sure
Thanks a lot, I hope it can bring much value for you.