In article <mailman.3693.1345697563.4697.python-l...@python.org>, Evan Driscoll <drisc...@cs.wisc.edu> wrote:
> > In fact, Python doesn't have variables not as C or Java programmers > > would understand the term. What it has instead are references to objects > > (with names as one kind of reference). > > OK, I've seen this said a few times, and I have to ask: what do you mean > by this? I consider myself pretty decent at Python and other languages, > and I really don't get it. I'll take a shot at this. When I execute: a = 4 I'm doing two things. The first is to create an object of type int with a value of 4. I think everybody is OK with that part. The confusing part comes with the LHS. In C, or Java, there's a container called "a" which holds a value. In C, that value is the integer 4, in Java it's an Integer object (well, at least I think it is, I've never fully groked how Java handles integers). In Python, there is no container named "a". There is, however, a dict which exists somewhere in python-space. You can get a reference to this dict by calling globals(). What the assignment does is effectively: globals()["a"] = 4 In fact, I can even write it that way and everything works: >>> globals()["a"] = 42 >>> a 42 Even id() thinks they're the same thing: >>> id(a) 1755402140 >>> id(globals()["a"]) 1755402140 But, notice what happens if I now assign something new to a: >>> a = 123 >>> id(a) 1755403176 The id has changed! Now, we all know that the id of an object is its memory address (that's not guaranteed, but in the standard C implementation of Python, that's what it is). Now, what if I do something similar in C: #include <stdio.h> main() { int a = 40; printf("a = %d, &a = %p\n", a, &a); a = 99; printf("a = %d, &a = %p\n", a, &a); } When I compile and run this, it prints: a = 40, &a = 0x7fff1911f5bc a = 99, &a = 0x7fff1911f5bc Notice that the address of the variable "a" didn't change when I assigned it a new value. That's what people mean when they say C has variables and Python doesn't; it just binds names to values.
-- http://mail.python.org/mailman/listinfo/python-list