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


Everything’s an object. A variable is a pointer to an object. var1 is a pointer to the object 1 (which is an integer). var2 is also a pointer to the same object. If you point var1 to a different object (the integer 2), that doesn’t change var2. list1 is a pointer to the list object you defined. list2 is a pointer to the same object. If you change the object, both pointers still point to it.
At least that’s my understanding of the whole business. If I got anything wrong, in sure somebody will point it out.