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 []


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.