Bug with lists of pairs of lists and append()
teroV at nowhere.invalid
Fri Sep 28 21:54:40 CEST 2007
Gabriel Zachmann wrote:
> could some kind soul please explain to me why the following trivial code
> is misbehaving?
> 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], )]
> 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,
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]
[[1, 2, 3]]
More information about the Python-list