The meaning of "=" (Was: tough-to-explain Python)

Terry Reedy tjreedy at udel.edu
Wed Jul 8 12:57:31 EDT 2009


kj wrote:

> To clarify, this comes from my reading of Fredrik Lundh's pages
> "Python Objects" (http://effbot.org/zone/python-objects.htm) and
> "Call By Object" (http://effbot.org/zone/call-by-object.htm).
[snip]
> [END OF LENGTHY QUOTE]
> 
> Therefore, extending just a bit beyond Lundh's explanation, if we
> did:
> 
> name = []
> name.append(1)
> name[0] = 3
> 
> ...the second assignment would amount to a method call on the object
> called 'name', an operation of a very different nature (according
> to Lundh) from the first assignment, which is a modification of a
> namespace.

I disagree. Assignment creates an association. Modification of a 
namespace, when implemented, amounts to a method call on the concrete 
object, whether a Python object or not, that implements the abstraction 
of a namespace. At module scope,
   name = ob
is the same as
   globals()['name']=ob
Within a class statement, substitute '<class-dict>' for 'globals'
Within functions, CPython uses an internal array, so
   name = ob
becomes
   <locals_array>[name-number] = ob

Or, to put it another way, Python dicts and lists are, considered 
abstractly, associations also, just like namespaces. Dicts are more 
general than namespaces, sequences are 'number-spaces' instead of 
name-spaces.

Terry Jan Reedy




More information about the Python-list mailing list