Arnaud Delobelle wrote:
But in the course of conversation I might refer to Napoleon, meaning Napoleon Bonaparte (1769 - 1821) or Napoleon III (1808 - 1873).
That's more like referring to the name 'Napoleon' in two different namespaces. The original binding still exists, you're just switching contexts.
My point was to get away from a model for Python which was built on its likely implementation and to hint that we can build one using the naive concept of 'name for a thing' instead.
I don't believe it's possible to build any complete and correct model of Python behaviour without including some concept equivalent to a reference. You can talk about names written on PostIt notes and such like, but that only gets you a short way. It doesn't easily handle names in different namespaces, or references that exist without simple names, e.g. list and tuple items. Trying to repair these deficiencies only leads to increasingly bizarre and contrived mental pictures. On the other hand, if you explicitly include the concept of a reference from the beginning, everything is quite clear and consistent. In other words, the model should be as simple as possible but no simpler. Leaving out references makes it too simple. Another point I'd like to make is that there is nothing inherently low-level about the concept of a reference. It doesn't have to be implemented as a memory address or any other particular machine-level thing. It's possible to talk about Python object references in a completely implementation-independent way. Also, just because you don't explicitly refer to them and manipulate them at the language level doesn't mean they don't exist. To think otherwise is like thinking that air doesn't exist just because you can't see it. There are plenty of experiments which clearly indicate its existence. Likewise, there are plenty of experiments that you can perform with any Python interpreter that reveal the existence of references, or something equivalent to them. -- Greg -- http://mail.python.org/mailman/listinfo/python-list