On 21 fév, 23:19, John Henry <[EMAIL PROTECTED]> wrote: > 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 >
Explicitely using list.extend would make things clearer: def invoke_some_fct(parent): parent.x.extend(['world']) Now there's no reason to feel nervous about this. All you have to remember is that Python never copy anything unless explicitely asked for. -- http://mail.python.org/mailman/listinfo/python-list