On 18 November 2013 06:57, Ayo Rotibi <[email protected]> wrote: > Hi,
Hi, please don't post in HTML. > I am a complete newbie to python. > > I read that an assignment with an = on lists does not make a copy. Instead, > assignment makes the two variables point to the one list in memory. For > instance, if a = [1, 2, 3] and b=a, then b = [1, 2, 3]. This is correct. > However, I discovered that if I change the value in ‘a’, ‘b’ does not take > the new value. I thought since it is pointing to the same storage as ‘a’, > ‘b’ should take the new value… It does take the new value. Here is a demonstration: >>> a = [1, 2, 3] >>> a [1, 2, 3] >>> b = a >>> b [1, 2, 3] >>> a[0] = 'new value' >>> a ['new value', 2, 3] >>> b ['new value', 2, 3] This is because both names a and b are bound to the same list object. However if you assign a different list object to one of the names then they will no longer be bound to the same object. Continuing from above: >>> a = ['a', 'different', 'list', 'object'] >>> a ['a', 'different', 'list', 'object'] >>> b ['new value', 2, 3] The key thing is that "bare" assignment (i.e 'a = ...') rebinds the name a to a new object where as item assignment (i.e. 'a[index]= ...') changes values in the list that a is bound to. Oscar _______________________________________________ Tutor maillist - [email protected] To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor
