On 5/6/14 5:00 PM, Mark H Harris wrote:
On 5/6/14 3:31 PM, Ned Batchelder wrote:
On 5/6/14 12:42 AM, Gary Herron wrote:
This gets confusing, but in fact the most accurate answer is that Python
does not have "variables", so there is no such thing as passing
"variables" by reference or any other method.  Python *does* have names
bound to values, but that's a very different thing. If necessary, you
may consider that the *values* are passed by reference.

This meme bugs me so much.  Python has variables.  They work differently
than variables in C.  In fact, they work by having names bound to values.

What does the word "variable" mean. Think BASIC variables. You can set
them, you can reset them, you can delete them, you can change them.  ...
because they are variable.


Python has names bound to objects... some of which you may not change.
Once the name is bound to an object you may bind it to another object,
but you may not change it, nor may you change the object it is bound to
if the object is immutable.

I quite like the definition I found on Wikipedia: "a symbolic name associated with a value and whose associated value may be changed." The word "change" here is ambiguous: it could mean mutating an existing value, or rebinding to another value. While I can't mutate immutable values, I can always rebind a Python name to another value.

Python cannot do "pass variable by reference", but not because it lacks variables. What it lacks is the ability to refer to a variable. Names cannot be referred to, so there is no way to refer to a variable. This is definitely different than C.

You are right about the comparison to BASIC: BASIC's variables can always be mutated. Python's variables cannot always be, because some of them have immutable values (or happen to at the moment, they can always be rebound!)

--
Ned Batchelder, http://nedbatchelder.com

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to