Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!news.albasani.net!weretis.net!feeder1.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Christopher Head Newsgroups: comp.lang.python Subject: Re: scope of function parameters Date: Sun, 29 May 2011 14:48:53 -0700 Organization: solani.org Lines: 35 Message-ID: <20110529144853.2adff584@kruskal.chead> References: <201105291147.26545.wolfgang@rohdewald.de> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Trace: solani.org 1306705734 5644 eJwFwYkBADAEBLCZfIdxUPYfoYkJCOMKg9rZxdte7nnYdC1WKNGcZ4h4TUcSRRfvuVzb+yw4EZ4= (29 May 2011 21:48:54 GMT) X-Complaints-To: abuse@news.solani.org NNTP-Posting-Date: Sun, 29 May 2011 21:48:54 +0000 (UTC) X-User-ID: eJwFwQkBACAIA8BK4xlqHATpH8E7WkjU8mA4h/Mm+9B4CnhLUm4SkboftsK1u0exSgp+2+IDIMcREw== X-Newsreader: Claws Mail 3.7.8 (GTK+ 2.22.1; x86_64-pc-linux-gnu) Cancel-Lock: sha1:aFcdqbSrPaSJdNY7tp42ejMJEhE= X-NNTP-Posting-Host: eJwNyMEBwCAIA8CVjEDEcUBg/xHae54JwXeURrWxuXAexFuyEl0meGdfbSal6YTW9adqfce6babSLRLBDFTImpaA/71L4B+/PRpR Xref: x330-a1.tempe.blueboxinc.net comp.lang.python:6585 On Sun, 29 May 2011 16:19:11 -0400 Henry Olders wrote: > > def fnc2(c): > > c = c[:] > > c[1] = 'having' > > return c > > Thank you, Wolfgang. That certainly works, but to me it is still a > workaround to deal with the consequence of a particular decision. > From my perspective, a function parameter should be considered as > having been assigned (although the exact assignment will not be known > until runtime), and as an assigned variable, it should be considered > local. > > Henry This has nothing to do with function parameters and everything to do with what a "variable name" actually means. You can get the same effect with only globals: >>> x=[1,2,3] >>> y=x >>> x.append(7) >>> y [1, 2, 3, 7] Why in the world does "y" end with 7, even though it was appended to "x"? Simple: because "x" and "y" are two names for the same list, as Henry explained. No functions involved, no locals, no parameters, no scoping. Again, if "y=x" were instead "y=x[:]" then the output would be "[1,2,3]" because "y" would refer to a copy of the list rather than the same list. Chris