On Monday, August 6, 2012 3:50:13 PM UTC-4, Mok-Kong Shen wrote: > I ran the following code: > > > > def xx(nlist): > > print("begin: ",nlist) > > nlist+=[999] > > print("middle:",nlist) > > nlist=nlist[:-1] > > print("final: ",nlist) > > > > u=[1,2,3,4] > > print(u) > > xx(u) > > print(u) > > > > and obtained the following result: > > > > [1, 2, 3, 4] > > begin: [1, 2, 3, 4] > > middle: [1, 2, 3, 4, 999] > > final: [1, 2, 3, 4] > > [1, 2, 3, 4, 999] > > > > As beginner I couldn't understand why the last line wasn't [1, 2, 3, 4]. > > Could someone kindly help? > > > > M. K. Shen
I've modified your code slightly so you can see what's happening with u in the middle of function xx. Take a look: u=[1,2,3,4] def xx(nlist): print("xx(u)\n") print("At first, u and nlist refer to the same list") print("nlist: %s u: %s\n" % (nlist, u)) nlist+=[999] print("nlist+=[999]\n") print("The list has been modified in place. u and nlist are still equal") print("nlist: %s u: %s\n" %(nlist, u)) nlist=nlist[:-1] print("nlist=nlist[:1]\n") print("Now nlist refers to a new list object in memory that was created by") print("taking a slice of u. u and nlist are no longer equal.") print("nlist: %s u: %s" %(nlist, u)) xx(u) Here's the output: xx(u) At first, u and nlist refer to the same list nlist: [1, 2, 3, 4] u: [1, 2, 3, 4] nlist+=[999] The list has been modified in place. u and nlist are still equal nlist: [1, 2, 3, 4, 999] u: [1, 2, 3, 4, 999] nlist=nlist[:1] Now nlist refers to a new list object in memory that was created by taking a slice of u. u and nlist are no longer equal. nlist: [1, 2, 3, 4] u: [1, 2, 3, 4, 999] Thank you, Rob Day, for explaining a some of what's happening behind the scenes. -- http://mail.python.org/mailman/listinfo/python-list