[Python-ideas] Python Isn't Perfect: adding a 'gotchas' section to the tutorial

Terry Reedy tjreedy at udel.edu
Mon Dec 12 01:13:23 CET 2011

On 12/11/2011 4:30 PM, Richard Prosser wrote:

> However I still feel that there are some aspects of the language which
> are not in the true spirit of Python (i.e. 'intuitive').

While 'intuitive' may be part of the 'true spirit of Python', it is not 
included in the Zen of Python, perhaps because it it so slippery and 
person dependent. Python is more in tune with everyday life and 
therefore with naive intuition than some other languages.

> The discussion about default mutable types is one of these. It seems to
> me that the essential problem is that of assignment in general, which (I
> believe) creates a reference on the LHS to the object on the RHS, rather
> than having a copy operation to make the two objects completely
> separate. That can be confusing in other contexts, not just with default
> parameters.

When an organization reassign the role 'president' to a new person, they 
do not copy the person. Neither does Python. We use aliases (multiple 
ways to refer to the same entity) all the time in real life.

Python is quite consistent. Expressions evaluate to objects, either 
pre-existing or new. "Target = expression" binds the target to the 
object resulting from evaluating the expression. "f(expression)" binds 
the first parameter name of f to the expression object.

> If I am to write a 'gotchas' FAQ or whatever then I would like to
> understand the reasoning behind such design decisions but I can't find
> any 'deep' explanations at present - just several posts about people
> being puzzled! A similar comment applies to the lack of type declarations.

Both behaviors reflect the fact that Python is a named object language, 
rather than a named memory block language, and that in Python types are 
a property of objects rather than of names. This is similar to at least 
some uses of names in everyday life. For instance, the name Buddy could 
be bound by a particular person to a person, dog, other pet, story, 
boat, or even a rifle.

Terry Jan Reedy

More information about the Python-ideas mailing list