On Mon, 17 Feb 2014 11:54:45 +1300, Gregory Ewing wrote: > Chris Angelico wrote: >> Because everything in Python is an object, and objects always are >> handled by their references. > > <beginner_thought> So, we have objects... and we have references to > objects... but everything is an object... so does that mean references > are objects too? </beginner_thought>
Every *thing* is an object. References aren't *things*. An analogy: there is no thing "Greg Ewing" which is independent of you, there is you, the thing with an independent existence, and then there is the reference (or name), "Greg Ewing", a label for you. But perhaps it is better to say that all *values* are objects. > This is the kind of trouble you get into when you make a statement of > the form "everything is an X"[1]. When we say "everything is an object", > we don't literally mean everything, only... well, those things that > *are* objects. Which doesn't really help the beginner much. I don't believe that in Python there are any *things* (values) which aren't objects. Even classes and exceptions are values. That's not the case in all languages. In Java, you have objects, and you have unboxed (native) types, and you have classes which aren't values at all. (Or at least, not first-class values.) So before you ask: for-loops aren't things (values). Neither are while- loops, try...except blocks, pass statements, del statements, etc. Nor are names and other references -- I believe that there is a practice in certain areas of computer science to call them "l-values", which despite the name are not values at all -- at least not in Python. Apart from binding and unbinding: ref = something() del ref which are somewhat special, you can't perform computations on *references*, only on the things (values) which references refer to. Contrast this to a hypothetical language which allowed you do perform computations on references, say using a special ! operator: # given x = 23 XY = 42 # then print (!x+"Y") would print 42. The expression !x+"Y" operates on the reference itself, and then print operates on the value referred to by that new reference. > [1] Mathematicians tried this. "Everything is a set!" Yeah, right... No, that's okay. You only get into trouble when you have self-referential sets, like "the set of all sets that don't contain themselves". -- Steven -- https://mail.python.org/mailman/listinfo/python-list