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

  • farmgineer@nord.pub
    link
    fedilink
    English
    arrow-up
    6
    ·
    18 days ago

    My brain threw a compile error on |=. I have no idea what that does without looking it up (I’ve basically never touched python having mostly worked in perl/shell back in the day and I rarely need scripting languages today). I’m also not sure what the pipe operator on its own is doing there.

    • esa@discuss.tchncs.de
      link
      fedilink
      arrow-up
      5
      ·
      18 days ago

      I didn’t have previous exposure to that exact syntax either, but:

      • Python and plenty other languages have assignment variations with an operator like +
      • | in plenty of languages means logical OR
        • possibly bitwise, but that seems unlikely in Python
      • Dicts are sorta complex siblings of sets
      • In terms of sets, OR is equivalent to a union

      Hence, a |=b should have the same meaning as a = a | b or a = a.union(b)

      and then the quiz is about basically implementation details and what the actual semantics winds up being in a language like python, where stuff is mutable by default and references are implicit (even though the zen of python states a preference for being explicit)

      • bterwijn@programming.devOP
        link
        fedilink
        arrow-up
        3
        ·
        edit-2
        17 days ago

        There is one important difference between a |= b and a = a | b, that is one part that makes this exercise difficult. See the dictionary docs (https://docs.python.org/3/builtins/stdtypes.html#dict):

        d |= other Update the dictionary d with keys and values from other, which may be either a mapping or an iterable of key/value pairs. The values of other take priority when d and other share keys. Added in version 3.9.

        Pick your answer and check the Solution link.

        The zen of Python lies unless you’re Dutch. I’m Dutch and when I look out of my office I see the CWI where Guido wrote the original Python versions back in the day, see “Python the documentory” on YouTube.

        • esa@discuss.tchncs.de
          link
          fedilink
          arrow-up
          2
          ·
          17 days ago

          I was trying not to spoil that a |= b and a = a | b have different semantics though, as that pretty much winds up giving away the answer IMO