Newcomer question wrt variable scope/namespaces
Diez B. Roggisch
deets at nospam.web.de
Sat Jan 14 20:10:07 CET 2006
Florian Daniel Otel wrote:
> First of all, many thanks for the reply. Do I understand it correctly
> that actually the rule has to be refined as pertaining to the (so
> called) "immutable" types (like e.g. integers, tuples/strings)
> whereas lists and dictionaries are "mutable" types and the said
> scoping rule does not apply ?
The scoping rules _do_ apply in all circumstances - they forbid changing
the binding of a name to an _object_.
So (without any scoping whatsoever):
>>> a = 1
>>> b = 
there is no way you can change the value of the object with id 2000000,
which the name a points to. Because it is immutable, which tuples are, too.
But on the list with id 3000000 you can invoke some methods that mutate it.
The scoping has _nothing_ to do with these facts. But in case of a
closure, the operation
b = 1
is forbidden, as it tries to rebind the name b to another object.
Similar, the scoping rules in case of global variables without
global-declaration allow access to the global through its name, but
prevent the global name being rebound to another value - instead,
silently a local name is created.
More information about the Python-list