What's wrong with this code?

Chris Angelico rosuav at gmail.com
Mon Jul 23 17:24:29 CEST 2012

On Tue, Jul 24, 2012 at 12:50 AM, Stone Li <viewfromoffice at 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!)


More information about the Python-list mailing list