It is not a global because accessing an item of a list does not change whether it is global or local. It would only be global if you declared it global via a "global" statement. Can you give an example, that would help determine the issue.
On Mon, 14 Aug 2017 at 16:06 Mok-Kong Shen <mok-kong.s...@t-online.de> wrote: > Am 14.08.2017 um 21:53 schrieb Ned Batchelder: > > On 8/14/17 3:21 PM, Mok-Kong Shen wrote: > >> Am 14.08.2017 um 20:50 schrieb Ned Batchelder: > >>> On 8/14/17 2:21 PM, Mok-Kong Shen wrote: > >>>> I ran the attached program and got the following output: > >>>> > >>>> [1, 2, 3] > >>>> [3, 6, 9] > >>>> > >>>> I don't understand why the modification doesn't work in the case of > >>>> test() but does work in the case of test1(). > >>>> > >>>> Thanks for your help in advance. > >>>> > >>>> M. K. Shen > >>>> > >>>> ------------------------------------------------------------ > >>>> > >>>> def test(alist): > >>>> alist=[3,6,9] > >>>> return > >>>> > >>>> def test1(alist): > >>>> alist[0],alist[1],alist[2]=3,6,9 > >>>> return > >>>> > >>>> ss=[1,2,3] > >>>> test(ss) > >>>> print(ss) > >>>> test1(ss) > >>>> print(ss) > >>> > >>> This reassigns the name alist: alist = [3, 6, 9]. That changes the > >>> local variable, but cannot affect the caller's variables. > >>> > >>> This leaves alist as the same object, but reassigns its elements, > >>> mutating the list: alist[0] = 3 > >>> > >>> This talk has more details: https://nedbatchelder.com/text/names1.html > >> > >> I could more or less understand that in test() alist is interpreted as > >> local but in the extended program below in test2() I first write the > >> same as in test1(), after which I logically assume that the name alist > >> is now known as global and then I write alist=[30,60,90] but that > >> doesn't have any effect globally, since I get the output: > >> > >> [1, 2, 3] > >> [3, 6, 9] > >> [3, 6, 9] > >> > >> Could you please explain that? > >> > >> M. K. Shen > >> --------------------------------------------------------- > >> > >> def test(alist): > >> alist=[3,6,9] > >> return > >> > >> def test1(alist): > >> alist[0],alist[1],alist[2]=3,6,9 > >> return > >> > >> def test2(alist): > >> alist[0],alist[1],alist[2]=3,6,9 > >> alist=[30,60,90] > >> return > >> > >> ss=[1,2,3] > >> test(ss) > >> print(ss) > >> test1(ss) > >> print(ss) > >> test2(ss) > >> print(ss) > > > > Your test2 function first mutates the caller's list by assigning > > alist[0]=3, then it rebinds the local name alist to be a new list. So > > the caller's list is now [3, 6, 9]. > > Sorry for my poor knowledge. After the line alist[0]..., what is the > status of the name alist? It's now a global name, right? So why in the > line following that the name alist would suddenly be interpreted as > local? I can't yet fully comprehend the logic behind that. > > M. K. Shen > > > . > > -- > https://mail.python.org/mailman/listinfo/python-list > -- Oliver My StackOverflow contributions My CodeProject articles My Github projects My SourceForget.net projects -- https://mail.python.org/mailman/listinfo/python-list