[EMAIL PROTECTED] wrote: > On 21 fév, 23:06, Jeff Schwab <[EMAIL PROTECTED]> wrote: >> John Henry wrote: >>> On Feb 21, 1:48 pm, John Henry <[EMAIL PROTECTED]> wrote: >>>> On Feb 21, 1:43 pm, mrstephengross <[EMAIL PROTECTED]> wrote: >>>>> Hi all. In C, an assignment statement returns the value assigned. For >>>>> instance: >>>>> int x >>>>> int y = (x = 3) >>>>> In the above example, (x=3) returns 3, which is assigned to y. >>>>> In python, as far as I can tell, assignment statements don't return >>>>> anything: >>>>> y = (x = 3) >>>>> The above example generates a SyntaxError. >>>>> Is this correct? I just want to make sure I've understood the >>>>> semantics. >>>>> Thanks, >>>>> --Steve >>>> That's true, and I am happy that they decided to make that a syntax >>>> error. >>> BTW: The less obvious issues when coming from the C world are Python >>> syntax like these: >>> y = x = 3 >>> a = 4 >>> y = x = a >>> print x,y >>> a = 5 >>> print x,y >> That's the same behavior I would expect in C, on the grounds that C >> assignments do bit-wise copies. What I found confusing at first was >> that the same variable will either directly store or merely refer to an >> object, depending on the type of the object: >> >> >>> a = [ 'hello' ] >> >>> y = x = a >> >>> a += [ 'world' ] >> >>> print x, y >> ['hello', 'world'] ['hello', 'world'] > > There's nothing like a variable "storing" anything in Python. All you > have are names to (references to) objects binding in a namespace. Now > the fact is that some types are mutable and other are not. In your > above example, the augmented assignment does *not* rebind a, but > invoke a.extend(). With integers, it would have rebind a. So while > your observation is exact, your interpretation is wrong !-)
Thank you for the clarification. For some reason, I had it in my head that ints were packed directly into the C structures that represent Python variables, in the same (union?) member that otherwise would store a pointer. -- http://mail.python.org/mailman/listinfo/python-list