Gabriel Zachmann wrote: > Well, > > could some kind soul please explain to me why the following trivial code > is misbehaving? > > > #!/usr/bin/python > s = [] > l = [ 0 ] > r = [0, 0] > while r: > x = (l,r) > print x > s.append( x ) > l.append( r.pop(0) ) > print s > > > > The output I get is: > > ([0], [0, 0]) > ([0, 0], [0]) > [([0, 0, 0], []), ([0, 0, 0], [])] > > and the error is in the last line: the two pairs in the outer list are > identical and they should be equal to the pairs one the first and the > 2nd line, respectively! Shouldn't they? > > I think I'm going nuts -- for the life of me I don't see what's going on > ... > > Thanks a lot in advance for any insights, etc. > > Best regards, > Gabriel.
You didn't say what it is supposed to do. But, does replacing line "x = (l, r)" with "x = l[:], r[:]" do the trick? In the original code you do basically the same as this >>> a = [] >>> b = [1,2] >>> a.append(b) >>> b.append(3) >>> a [[1, 2, 3]] HTH :) -- http://mail.python.org/mailman/listinfo/python-list