Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #25889

Re: What's wrong with this code?

References <CAMugt-pRmdy5M_18rbGC13-6_aqVOCUHYX4-C-XaPWKh+dYRtg@mail.gmail.com>
Date 2012-07-24 01:24 +1000
Subject Re: What's wrong with this code?
From Chris Angelico <rosuav@gmail.com>
Newsgroups comp.lang.python
Message-ID <mailman.2481.1343057076.4697.python-list@python.org> (permalink)

Show all headers | View raw


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

Back to comp.lang.python | Previous | Next | Find similar | Unroll thread


Thread

Re: What's wrong with this code? Chris Angelico <rosuav@gmail.com> - 2012-07-24 01:24 +1000

csiph-web