Tim Chase wrote: > # swap list contents...not so much... > >>> m,n = [1,2,3],[4,5,6] > >>> m[:],n[:] = n,m > >>> m,n > ([4, 5, 6], [4, 5, 6]) > > > The first two work as expected but the 3rd seems to leak some > internal abstraction. It seems to work if I force content-copying: > > >>> m[:],n[:] = n[:],m[:] > > or even just > > >>> m[:],n[:] = n,m[:] > > but not > > >>> m[:],n[:] = n[:],m > > Is this a bug, something Python should smack the programmer for > trying, or just me pushing the wrong edges? :)
For these types of things, it's best to expand the code out. The appropriate expansion of: m,n = [1,2,3],[4,5,6] m[:],n[:] = n,m is: m = [1,2,3] n = [4,5,6] m[:] = n n[:] = m After the third line, m == n, giving the behaviour you see. OTOH, for: m,n = [1,2,3],[4,5,6] m[:],n[:] = n[:],m[:] the expansion is more like: m = [1,2,3] n = [4,5,6] rhs1 = n[:] rhs2 = m[:] m[:] = rhs1 n[:] = rhs2 Tim Delaney -- http://mail.python.org/mailman/listinfo/python-list