Thanks for the info. I did not know that.
Thanks
Vincent Davis


On Sat, Jan 24, 2009 at 10:46 AM, Steve Holden <st...@holdenweb.com> wrote:

> Vincent Davis wrote:
> > I have a short peace of code that is not doing what I expect. when I
> > assign a value to a list in a list alist[2][4]=z this seems replace all
> > the 4 elements in all the sub lists. I assume it is supposed to but this
> > is not what I expect. How would I assign a value to the 4th element in
> > the 2nd sublist. here is the code I have. All the printed values are
> > what I would expect except that all sublist values are replaced.
> >
> > Thanks for your help
> > Vincent
> >
> > on the first iteration I get ;
> > new_list [[None, 0, 1, None], [None, 0, 1, None], [None, 0, 1, None],
> > [None, 0, 1, None], [None, 0, 1, None], [None, 0, 1, None]]
> >
> > and expected this;
> > new_list [[None, 0, 1, None], [None, None, None, None],
> > [None, None, None, None], [None, None, None, None], [None, None, None,
> > None], [None, None, None, None]]
> >
> > Code;
> > list1=[[1,2],[0,3,2,1],[0,1,3],[2,0,1],[3],[2,3]]
> > new_list=[[None]*4]*6
> > print 'new_list',new_list
> > for sublist in range(6): # 6 becuase it is the # of rows lists1
> >     print 'sublist', sublist
> >     for x in list1[sublist]:
> >         print list1[sublist]
> >         print 'new_list[sublist][x]', new_list[sublist][x]
> >         new_list[sublist][x]=list1[sublist].index(x)
> >         print 'sublist', sublist, 'x', x
> >         print new_list[sublist][x]
> >     print 'new_list', new_list
> >
> When you create new_list you are actually filling it with six references
> to the same list. Consequently when you change one of those list
> elements they all appear to change (because they are all referencing the
> same list object).
>
> Try instead
>
> new_list = [[None]*4 for i in range(6)]
>
> and you should find your code works as expected. In this case the list
> is constructed with a new sublist as each element.
>
> regards
>  Steve
> --
> Steve Holden        +1 571 484 6266   +1 800 494 3119
> Holden Web LLC              http://www.holdenweb.com/
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to