Well, those variables are references to immutable strings which are allocated at compile time.
Of course it depends on the VM, but in general, I think, most C-based scripting languages allocate a large block of memory, expanding it as necessary and do their own allocation within that, rarely if ever giving anything back to the O/S. Especially in a lexically scoped language, which almost all of them are, variables are all allocated dynamically within this block, not on anything analogous to a C stack, and they are freed with either reference counting or with a garbage collector.
If your scripting language is running on the JVM, or .NET, or something like it (Parrot?), creating a variable is merely the creation of something like a Java object. Some time after there are no more references to the object, the garbage collector will reclaim the memory.