On Tue, Jul 24, 2012 at 12:50 AM, Stone Li <viewfromoff...@gmail.com> wrote: > > I'm totally confused by this code: > > Code:
Boiling it down to just the bit that matters: c = None d = None x = [c,d] e,f = x c = 1 d = 2 print e,f When you assign "e,f = x", you're taking the iterable x and unpacking its contents. There's no magical "referenceness" that makes e bind to the same thing as c; all that happens is that the objects in x gain additional references. When you rebind c and d later, that doesn't change x, nor e/f. What you've done is just this: x = [None, None] e,f = x c = 1 d = 2 print e,f It's clear from this version that changing c and d shouldn't have any effect on e and f. In Python, any time you use a named variable in an expression, you can substitute the object that that name is referencing - it's exactly the same. (That's one of the things I love about Python. No silly rules about what you can do with a function return value - if you have a function that returns a list, you can directly subscript or slice it. Yay!) ChrisA -- http://mail.python.org/mailman/listinfo/python-list