Re: Removal of Temporary symbols
- To: mathgroup at smc.vnet.net
- Subject: [mg69061] Re: Removal of Temporary symbols
- From: carlos at colorado.edu
- Date: Tue, 29 Aug 2006 03:25:46 -0400 (EDT)
- References: <ecu66i$7hf$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Andrew Moylan wrote:
> Hi,
>
> Can you help me understand the conditions under which Mathematica
> automatically removes symbols with the attribute Temporary that are
> created by calls to Module? Please consider the following code:
>
> $Context="test`"
>
> Module[{x, y},
> y[] = 0;
> x = y;
> ]
>
> Names["test`*"]
>
> For me the result of the call to Names is something like {y, y$18}. Why
> is the temporary variable y$18, which is no longer referenced by
> anything, not being automatically removed?
>
If explicit deletion of temporaries is desirable, for example to free
memory taken up by a large list or array, use ClearAll
before module return. I do that for graphic modules that build
large plot files.
> If I remove the line "x = y;" from the above code, the temporary
> variable is destroyed as expected, and the result of the call to Names
> is {y}. I'm not clear on why the symbol "y" has been created in the
> global ("test`") context in this case; but I'm not bothered by it
> (because, unlike the preservation of temporary variables, it doesn't
> represent an O(n) memory overhead for evalutating my Module n times).
> Can anyone explain this behaviour?
>
> Cheers,
>
> Andrew