if var1 equals 1, and you run var2 = var1, that sets var2 to 1.

if list1 equals [1, 2, 3], and you run list2 = list1, that sets list2 to list1

so if you then run var1 = 2, var2 will still be 1

but if you run list1 = [3, 2, 1], list2 will give [3, 2, 1]

  • logging_strict@programming.dev
    link
    fedilink
    arrow-up
    1
    ·
    27 days ago

    Eww eww eww, I have a good one!

    function argument: params vs **params

    Assume both are the same Mapping.

    The former can update in-place. The later, nope.

    If the function is a generic function or one of the overloads. Wait what’s that? It’s the term used by functools.singledispatch to describe the fallback function when no overload function handles the case.

    Anyway

    Any param to either singledispatch generic or an overload, Whatever you throw at it, won’t be in-place updatable.

    • Maddier1993@programming.dev
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      19 days ago

      which makes sense to me. params is passing the reference to the dict into the function. Whereas, **params is expanding the dict into the scope of the function before calling the first line of the body.

      You can update the content of the former in-place, while the latter is just syntactic sugar for variadic function arguments.