Re: copying a variable

*To*: mathgroup at smc.vnet.net*Subject*: [mg92336] Re: copying a variable*From*: Szabolcs Horvát <szhorvat at gmail.com>*Date*: Sat, 27 Sep 2008 22:23:00 -0400 (EDT)*Organization*: University of Bergen*References*: <gbl303$m03$1@smc.vnet.net>

ramiro wrote: > Hello, > This must be very simple. Consider the following code: > > k[1] = 2; > sub[x_] := With[{z = x}, z[1] = 4; z] > r = sub[k]; > r[1] > k[1] > > The output is > 4 > 4 > > I would like to have the assignment inside the function (on z) don't > affect the parameter (x). I would like to copy x so that whatever > assignment I do on z doesn't affect it, in other words, I would like to > return _a copy_ of x. So that the output should be: > > 4 > 2 > I don't understand your question fully. What is the purpose of having two symbols with the same definition? Why couldn't you just do r[1] = 4 instead of r = sub[k]? Are you trying to transfer the other definitions associated with k to r, so that if k[2]=Pi was defined then after evaluating r = sub[k], r[2]=Pi would be automatically defined too? I suspect that there might be better solutions to your *actual* problem than copying definitions ... But if you really want to do this, you could try something like DownValues[r] = DownValues[k] /. k :> r for copying ... Be warned that this is very bug prone and is very likely to cause trouble with non-trivial definitions.