The “does Python have variables?” debate

Joseph Martinot-Lagarde joseph.martinot-lagarde at m4x.org
Thu May 8 04:07:11 EDT 2014


Le 08/05/2014 02:35, Ben Finney a écrit :
> Marko Rauhamaa <marko at pacujo.net> writes:
>
>> Ben Finney <ben at benfinney.id.au>:
>>
>>> That's why I always try to say “Python doesn't have variables the way
>>> you might know from many other languages”,
>>
>> Please elaborate. To me, Python variables are like variables in all
>> programming languages I know.
>
> Many established and still-popular languages have the following
> behaviour::
>
>      # pseudocode
>
>      foo = [1, 2, 3]
>      bar = foo          # bar gets the value [1, 2, 3]
>      assert foo == bar  # succeeds
>      foo[1] = "spam"    # foo is now == [1, "spam", 3]
>      assert foo == bar  # FAILS, ‘bar’ == [1, 2, 3]
>
> This is because such languages treat each variable as “containing” a
> value. Assignment puts another copy of the value in the variable, after
> which those two values have a distinct history. What happens to one
> value does not affect the other.
>
> Python, on the other hand, has this behaviour::
>
>      foo = [1, 2, 3]
>      bar = foo          # ‘bar’ binds to the value ‘[1, 2, 3]’
>      assert foo == bar  # succeeds
>      foo[1] = "spam"    # ‘foo’ *and* ‘bar’ now == [1, "spam", 3]
>      assert foo == bar  # succeeds, ‘bar’ is bound to ‘[1, "spam", 3]’
>
> The assignment statement in Python does not put a value in a container,
> the way it does for variables in many popular languages. Instead,
> assignment binds the left-hand-side reference (in these examples, names)
> to the right-hand-side value. Both remain references to the same value
> until the binding changes to some other value.
>
> So Python doesn't have variables in the way programmers coming from many
> other languages expect. Instead, it has references bound to values.
>
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.


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com





More information about the Python-list mailing list