Mok-Kong Shen <mok-kong.s...@t-online.de> writes: > I don't yet understand. Why (by which rule of the language reference) > should "alist=[30,60,90]" mean discarding the name's reference to the > [1,2,3] list?
I think I understand that question, but I find it surprising. What is your expectation of the following code? foo = "spam" foo = "beans" print(foo) What should ‘foo’ be bound to after the second assignment? Your question seems to imply you expect that the ‘foo’ reference would be bound to *both* of “"spam"” and “"beans"”, somehow. Is that right? How would that work? To answer the question: The semantics of an assignment statement are at in the Python language reference. Assignment statements are used to (re)bind names to values […] If the target is an identifier (name): […] The name is rebound if it was already bound. <URL:https://docs.python.org/3/reference/simple_stmts.html#grammar-token-assignment_stmt> A reference (a name is one kind of reference) can be bound to exactly one object at any time. > But then, since now the name alist is known to be global, why then in > the next line of test2 the name is suddenly interpreted to be local? The same section of the language reference discusses that. In brief: The fact that the first use of a name, in the current scope, is an assignment, means that the name is implicitly within that scope. -- \ “Pinky, are you pondering what I'm pondering?” “Uh, I think so, | `\ Brain, but we'll never get a monkey to use dental floss.” | _o__) —_Pinky and The Brain_ | Ben Finney -- https://mail.python.org/mailman/listinfo/python-list