A hard exercise to help build the right mental model for Python data.

The “Solution” link visualizes execution and reveals what’s actually happening using 𝗺𝗲𝗺𝗼𝗿𝘆_𝗴𝗿𝗮𝗽𝗵: https://github.com/bterwijn/memory_graph

  • bterwijn@programming.devOP
    link
    fedilink
    arrow-up
    0
    ·
    1 month ago

    I think the confusion comes from a += b being equivalent to a = a + b for immutable types, so some people generalize that incorrectly to mutable types too. Otherwise I think it’s pretty clear a += b mutates a, and a = a + b first computes a + b and then reassigns that to a so that its identity changes, just like in c = 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++.

    • lad@programming.dev
      link
      fedilink
      English
      arrow-up
      0
      ·
      1 month ago

      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