The “does Python have variables?” debate
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Thu May 8 09:22:00 EDT 2014
On Thu, 08 May 2014 18:14:48 +1000, Chris Angelico wrote:
> On Thu, May 8, 2014 at 6:07 PM, Joseph Martinot-Lagarde
> <joseph.martinot-lagarde at m4x.org> wrote:
>> For me, names bound to values is the same concept as pointer pointing
>> to memory. bar = foo copies the pointer and not the underlying memory.
>> This is not a foreign concept to C programmers.
>>
>>
> That is how it's implemented in CPython, after all... modulo the whole
> refcounting thing, of course. But that's not strictly a part of the
> definition of Python; it's just implementation.
Yes. And that's *not* how Jython or IronPython implement it, since
neither Java nor .Net provide pointers (in the C sense). Nor does PyPy,
which is Python written in Python (to be pedantic, RPython).
Now obviously you need to have *some* way to implement indirect
references. If this were 1965 or so and we were implementing Python in
FORTRAN, we'd use a big array and use array indexes as our "pointers".
After all, isn't that what C pointers are like? The index (address) of a
block of memory in a giant array (the heap)?
Given the architecture of our computing devices, I would expect that if
you go down deep enough, you would find something like a C pointer. But
Python is not necessarily implemented on such a device. In principle, we
could write a Python interpreter on a Turing machine, or using clockwork.
"Python uses pointers" is an *implementation detail*, not a language
feature.
> You could implement
> Python on pencil-and-paper (aka a dry run), and as long as you have a
> concept of names that reference objects, it's going to be fine. The
> "reference" might be done with a physical piece of string connecting a
> Post-It note with a name to a box with the object's state, meaning
> there's no way of copying any pointer, and it's still Python.
Yes, exactly.
--
Steven D'Aprano
http://import-that.dreamwidth.org/
More information about the Python-list
mailing list