On Thu, Aug 23, 2012 at 2:49 PM, Evan Driscoll <drisc...@cs.wisc.edu> wrote: > On 8/22/2012 18:58, Ben Finney wrote: >> You haven't discovered anything about types; what you have discovered is >> that Python name bindings are not variables. >> >> 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.
Simple example that'll work in many languages: x = 1; In C, this means: Assign the integer 1 to the variable x (possibly with implicit type casting, eg to floating point). In Java or C++, this means: Assign the integer 1 to the variable x. Ditto, but possibly 'x' is actually a class member etc rather than a simple variable. In Python, this means: Make the name x now refer to the object 1. Whatever x had before is de-referenced by one (in a simple refcounting situation, that may result in the object being destroyed), and the object referred to by the literal 1 is now pointed to by x. Names are just one kind of reference because complex objects can have unnamed references. For instance: foo = [1, 2, 3] foo[1] = "Hello, world!" The second element of foo just got rebound in exactly the same way x did, but it doesn't have a name of its own. Does that sort things out, or just make things more confusing? ChrisA -- http://mail.python.org/mailman/listinfo/python-list