On Feb 21, 2:06 pm, 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']
Yep. Took me a while to realize there is mutable objects, and non- mutable objects. To be honest, I am still not too comfortable about it. For instance, I still get nervous for code like: def invoke_some_fct(parent): y = parent.x y += [ 'world' ] print y, parent.x class abc: def __init__(self): self.x=[ 'hello' ] invoke_some_fct(self) print self.x hw = abc() -- http://mail.python.org/mailman/listinfo/python-list