if var1 equals 1, and you run var2 = var1, that sets var2 to 1.
if list1 equals [], 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 []


Eww eww eww, I have a good one!
function argument:
params vs **paramsAssume 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.
which makes sense to me.
paramsis passing the reference to the dict into the function. Whereas,**paramsis 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.