S
Steven D'Aprano
I don't know if I can help with this much, I'm still somewhat new to
python, but it is my understanding that "simple" variable, ei, strings,
ints, etc, although they don't have such names, behave like variables,
ei, if you pass them to a function, the function will copy them into a
new spot.
No. You can test this yourself:
s = "This is a BIG 'simple' variable." * (10 * 1024**2)
# s will take up at least 320 megabytes of memory
Watch how long it takes to create that big string -- on my (reasonably
fast) PC, there is a noticeable pause of five seconds the first time I
do it, and a longer pause of fifteen seconds the second time, with
noticeable disk-activity.
Pass s to a function, and see if there is a similar pause.
Python NEVER duplicates objects unless you explicitly ask it to, e.g. with
the copy module, or by using slicing s[:].
However, if you use lists, then it only passes a pointer, or
tuples as well. Ei, I just ran this through the python IDE.
Test
This seems to indicate that the variable is copied, as the value didn't
change.
Seems to, but no.
Python does not use a call by value ("arguments are copied when you pass
them to a function") model, nor does it use a call by reference
("pointers to arguments are passed to functions") model, except maybe
internally in the underlying C implementation. If you think about Python
as if it were C or Java, you will forever be confused about its behaviour.
Understand Python's call by object behaviour, and it will all make sense.
Other than this, I basically see a fight on terminology, and that's
that.
Terminology is important, because we understand the world through
language. If your language is confused or misleading, your understanding
will also be confused or incomplete.