A question on modification of a list via a function invocation
Antoon Pardon
antoon.pardon at vub.be
Wed Sep 6 03:12:37 EDT 2017
Op 04-09-17 om 17:43 schreef Steve D'Aprano:
> On Tue, 5 Sep 2017 01:17 am, Rustom Mody wrote:
>
>> Anton gave a picture explaining why/how references are needed and to be
>> understood
> Antoon gave a picture demonstrating one model of Python's semantics.
>
> It's a nice model that has a lot going for it, in particular that it matches the
> most obvious implementation. But it doesn't describe *Python* semantics, it
> describes an overlap between Python the language and the implementation of the
> Python interpreter.
>
> In particular, consider the picture of a name binding to a value:
>
>
> +-----+
> | |
> | 5 |
> | |
> +-----+
> ^
> |
> <x>
>
>
> This picture has three entities, but only two of them exist in Python:
>
> - the object 5;
>
> - the name "x" (names are not values in Python at runtime, but they
> are entities which exist in Python source code at compile time).
>
> The third entity is the reference linking the name to the object (the arrow).
> This isn't a runtime value in Python, nor is it a compile time entity that
> exists in source code. It is pure implementation, and as such, exists outside
> of the Python domain.
>
> I'm not saying that we should never use this model. Its a good model. But we
> should be clear that it is a model of the implementation, and it describes
> entities which are not part of the Python language. We cannot do this:
>
>
> +-----+
> | |
> | 5 |
> | |
> +-----+
> ^
> |
> <x>
> ^
> |
> <y>
>
>
> or any of the other things we can do in a language with references-as-values,
> like C or Pascal.
I don't agree that the above is an accurate picture of C or Pascal. It is more
like the following:
+-----+ +-----+
| | | |
| 5 |<----+--* |
| | | |
+-----+ +-----+
^ ^
| |
<x> <y>
And in case of a VAR parameter in Pascal like
procedure f(VAR x);
f(y)
one could use the following, which is the same
as after an assignment in python.
+-----+
| |
| 7 |
---> | |
/ +-----+
/
/ ^
/ |
<x> <y>
--
Antoon Pardon
More information about the Python-list
mailing list