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 summertime will point it out.
Oh noes, what are local lar enforcement going to do when they run out of fascist thugs to recruit? Oh the humanity!