Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #25889
| 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) |
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
Re: What's wrong with this code? Chris Angelico <rosuav@gmail.com> - 2012-07-24 01:24 +1000
csiph-web