The Visualize tool on pythontutor is a very clever way to illustrate what happens under the hood of python: http://www.pythontutor.com/visualize.html
EDIT: There seems to be a problem with python tutor at the moment. Click this link, if the embedded code below fails to load: Python Example
EDIT: embedded code not working - click link:
If you want to avoid pointer aliasing, you usually want to do one of these three things in order to copy a to b:
b = a[:]
This takes a shallow copy. Personally, I don't like this option, because the slicing notation is not clear to everyone. But it is definitely the shorter notation. This will fail if you want to copy a list of lists. Being a shallow copy, it does not copy lists of lists. It will merely copy the list of pointers to other "sub"-lists.
b = copy.copy(a)
This takes a shallow copy. It is more clear from the code what this does, so this is usually my preferred approach. Still a shallow copy, however.
b = copy.deepcopy(a)
This is the fail-safe method and takes a copy of everything, so use this if you're in doubt. Works pretty much in every case. The down side is that it's usually slower to copy everything with deepcopy.
Figure 1 : a and b contain to the
word "banana" in two different ways.