Bug with lists of pairs of lists and append()
TeroV
teroV at nowhere.invalid
Fri Sep 28 15:54:40 EDT 2007
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 :)
More information about the Python-list
mailing list