Re: initialized list: strange behavior
Steve Holden <[EMAIL PROTECTED]> writes: > Arnaud Delobelle wrote: >> Jason Scheirer <[EMAIL PROTECTED]> writes: >>> Python is pass-by-reference, not pass-by-value. >> >> It's certainly not pass-by-reference, nor is it pass-by-value IMHO. >> > Since no lists are being passed as arguments in these examples it's not > pass-by-anything. Jump off that horse right now! You're right that Python's calling semantics have nothing to do with the question asked. I just thought best not to leave the OP under any misapprehension. -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list
Re: initialized list: strange behavior
The issue is exhausted in Python Library Reference, Chapter 3.6, so I should apologize for initial posting. All comments were helpful, though Arnaud and Steve are right that pass-by-anything is off the point. Thanks All! -- http://mail.python.org/mailman/listinfo/python-list
Re: initialized list: strange behavior
Arnaud Delobelle wrote: > Jason Scheirer <[EMAIL PROTECTED]> writes: > >> On Nov 24, 10:34 pm, [EMAIL PROTECTED] wrote: >>> Hi Python experts! Please explain this behavior: >>> >> nn=3*[[]] >> nn >>> [[], [], []] >> mm=[[],[],[]] >> mm >>> [[], [], []] >>> >>> Up till now, 'mm' and 'nn' look the same, right? Nope! >>> >> mm[1].append(17) >> mm >>> [[], [17], []] >> nn[1].append(17) >> nn >>> [[17], [17], [17]] >>> >>> ??? >>> >>> Python 2.5 Win XP >>> >>> Thanks! >> You're creating three references to the same list with the >> multiplication operator. > > There's no need to introduce references: you're creating a list with the > same object at each position. > > [...] >> Python is pass-by-reference, not pass-by-value. > > It's certainly not pass-by-reference, nor is it pass-by-value IMHO. > Since no lists are being passed as arguments in these examples it's not pass-by-anything. Jump off that horse right now! 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
Re: initialized list: strange behavior
On Tue, Nov 25, 2008 at 9:23 AM, Arnaud Delobelle <[EMAIL PROTECTED]>wrote: > Jason Scheirer <[EMAIL PROTECTED]> writes: > > > On Nov 24, 10:34 pm, [EMAIL PROTECTED] wrote: > >> Hi Python experts! Please explain this behavior: > >> > >> >>> nn=3*[[]] > >> >>> nn > >> [[], [], []] > >> >>> mm=[[],[],[]] > >> >>> mm > >> > >> [[], [], []] > >> > >> Up till now, 'mm' and 'nn' look the same, right? Nope! > >> > >> >>> mm[1].append(17) > >> >>> mm > >> [[], [17], []] > >> >>> nn[1].append(17) > >> >>> nn > >> > >> [[17], [17], [17]] > >> > >> ??? > >> > >> Python 2.5 Win XP > >> > >> Thanks! > > > > You're creating three references to the same list with the > > multiplication operator. > > There's no need to introduce references: you're creating a list with the > same object at each position. > > [...] > > Python is pass-by-reference, not pass-by-value. > > It's certainly not pass-by-reference, nor is it pass-by-value IMHO. Please don't get into this here. We have enough threads for this already. > > > -- > Arnaud > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list
Re: initialized list: strange behavior
Jason Scheirer <[EMAIL PROTECTED]> writes: > On Nov 24, 10:34 pm, [EMAIL PROTECTED] wrote: >> Hi Python experts! Please explain this behavior: >> >> >>> nn=3*[[]] >> >>> nn >> [[], [], []] >> >>> mm=[[],[],[]] >> >>> mm >> >> [[], [], []] >> >> Up till now, 'mm' and 'nn' look the same, right? Nope! >> >> >>> mm[1].append(17) >> >>> mm >> [[], [17], []] >> >>> nn[1].append(17) >> >>> nn >> >> [[17], [17], [17]] >> >> ??? >> >> Python 2.5 Win XP >> >> Thanks! > > You're creating three references to the same list with the > multiplication operator. There's no need to introduce references: you're creating a list with the same object at each position. [...] > Python is pass-by-reference, not pass-by-value. It's certainly not pass-by-reference, nor is it pass-by-value IMHO. -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list
Re: initialized list: strange behavior
On Nov 24, 10:34 pm, [EMAIL PROTECTED] wrote: > Hi Python experts! Please explain this behavior: > > >>> nn=3*[[]] > >>> nn > [[], [], []] > >>> mm=[[],[],[]] > >>> mm > > [[], [], []] > > Up till now, 'mm' and 'nn' look the same, right? Nope! > > >>> mm[1].append(17) > >>> mm > [[], [17], []] > >>> nn[1].append(17) > >>> nn > > [[17], [17], [17]] > > ??? > > Python 2.5 Win XP > > Thanks! You're creating three references to the same list with the multiplication operator. You can easily get the same behavior because of similar mechanics in a more common scenario: In [1]: a = [] In [2]: b = a In [3]: a, b Out[3]: ([], []) In [4]: a.append(100) In [5]: a, b Out[5]: ([100], [100]) Python is pass-by-reference, not pass-by-value. -- http://mail.python.org/mailman/listinfo/python-list
Re: initialized list: strange behavior
[EMAIL PROTECTED] wrote: > Hi Python experts! Please explain this behavior: > [] make an empty list. [ [],[],[] ] makes a list of three different empty lists. 3*[[]] makes a list of three references to the same list. Realy, that should explain it all, but perhaps there are enough empty lists here to obscure things. Try this: Here b is a list that contains three references to a. Modify a, and all three references to a show the modification: >>> a = [1,2,3] >>> b = [a,a,a] >>> a.append(4) >>> b [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]] Gary Herron > nn=3*[[]] nn > [[], [], []] > mm=[[],[],[]] mm > [[], [], []] > > Up till now, 'mm' and 'nn' look the same, right? Nope! > > mm[1].append(17) mm > [[], [17], []] > nn[1].append(17) nn > [[17], [17], [17]] > > ??? > > Python 2.5 Win XP > > Thanks! > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list
initialized list: strange behavior
Hi Python experts! Please explain this behavior: >>> nn=3*[[]] >>> nn [[], [], []] >>> mm=[[],[],[]] >>> mm [[], [], []] Up till now, 'mm' and 'nn' look the same, right? Nope! >>> mm[1].append(17) >>> mm [[], [17], []] >>> nn[1].append(17) >>> nn [[17], [17], [17]] ??? Python 2.5 Win XP Thanks! -- http://mail.python.org/mailman/listinfo/python-list