On Sat, Nov 14, 2009 at 3:25 PM, AON LAZIO <aonla...@gmail.com> wrote: > Hi, I have some problem with object reference > Say I have this code
> a = b = c = None > slist = [a,b,c]
Values are stored in the list, not references to names. Modifying the list does not change what values the names a, b, and c have. There is no Python-level notion of pointers.
> for i in range(len(slist)): > slist[i] = 5
This modifies the contents of the list, it does not affect any other variables/names.
> print slist > print a,b,c
> I got this > [5, 5, 5] > None None None
> Question is how can I got all a,b,c variable to have value 5 also?
Use tuple unpacking:
#at start of code slist = [None]*3 #... #at end of code a, b, c = slist
Chris Rebert <c...@rebertia.com> writes: > On Sat, Nov 14, 2009 at 3:25 PM, AON LAZIO <aonla...@gmail.com> wrote: > > Hi, I have some problem with object reference > > Say I have this code
> > a = b = c = None > > slist = [a,b,c]
> Values are stored in the list, not references to names. Modifying the > list does not change what values the names a, b, and c have. There is > no Python-level notion of pointers.
There *is*, though, a notion of references, which is what the OP is asking about. The list does not store values, it stores references to values (just as a name references a value).
You're right that the names are irrelevant for the items in the list; the name ‘a’ and the item ‘slist[0]’ are always independent references.
> > for i in range(len(slist)): > > slist[i] = 5
Hence, this has no effect on what the names ‘a’, ‘b’, ‘c’ reference; those names continue to reference whatever they were already referencing. It is changing only what the list items ‘slist[0]’, ‘slist[1]’, ‘slist[2]’ reference.
-- \ “As we enjoy great advantages from the inventions of others, we | `\ should be glad to serve others by any invention of ours; and | _o__) this we should do freely and generously.” —Benjamin Franklin | Ben Finney
Chris Rebert wrote: > On Sat, Nov 14, 2009 at 3:25 PM, AON LAZIO <aonla...@gmail.com> wrote: >> Hi, I have some problem with object reference >> Say I have this code
>> a = b = c = None >> slist = [a,b,c]
> Values are stored in the list, not references to names.
That is not right either, or else newbies would not be surprised by >>> a = [0] >>> b = [a] >>> b[0][0] = 1 >>> a [1]
Subscriptable collections associate subscripts with objects. Namespaces associated names with objects. In either case, if you change the object, you change it, regardless of how you access it, such as by means of other associations. If you replace an association by associating a name or subscript with a new object, the old object is untouched (unless that was its last association) and other access methods by means of other associations are not affected.
On Sat, Nov 14, 2009 at 6:53 PM, Terry Reedy <tjre...@udel.edu> wrote: > Chris Rebert wrote: >> On Sat, Nov 14, 2009 at 3:25 PM, AON LAZIO <aonla...@gmail.com> wrote: >>> Hi, I have some problem with object reference >>> Say I have this code
>>> a = b = c = None >>> slist = [a,b,c]
>> Values are stored in the list, not references to names.
> That is not right either, or else newbies would not be surprised by >>>> a = [0] >>>> b = [a] >>>> b[0][0] = 1 >>>> a > [1]
> Subscriptable collections associate subscripts with objects. > Namespaces associated names with objects. > In either case, if you change the object, you change it, regardless of how > you access it, such as by means of other associations. > If you replace an association by associating a name or subscript with a new > object, the old object is untouched (unless that was its last association) > and other access methods by means of other associations are not affected.
Okay, I should have technically said "references to objects" rather than "values", but in any case, names themselves are certainly not referenced or the following would print "[1]".
>>> a = [0] >>> b = [a] >>> a = [42] >>> b[0][0] = 1 >>> a