The “does Python have variables?” debate

Marko Rauhamaa marko at pacujo.net
Thu May 8 02:19:23 EDT 2014


Ben Finney <ben at benfinney.id.au>:

> 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.

I don't think that has much to do with variables but rather the values.

What you are describing is that Python has pointer semantics. Your
example, properly understood and translated, will yield Python-esque
results in any programming language:

   #!/bin/bash
   a = /tmp/xyz
   touch $a
   b = $a
   cmp $a $b || exit
   echo z >>/tmp/xyz
   cmp $a $b || exit


   #include <stdlib.h>
   #include <assert.h>
   int main(void)
   {
       int *a = malloc(sizeof *a);
       *a = 7;
       int *b = a;
       assert(*a == *b);
       *a = 8;
       assert(*a == *b);
       return 0;
   }


Marko



More information about the Python-list mailing list