There is no concept of a pre-set variable, whatever this would be.
The basic syntax of invoking an external command as a child process looks something like
a=x b=y c=z p u v w
I ignored here redirection operators, to keep things simple. This line basically starts a child process with the command p and passes to it the argumenst u, v and w. Every new process needs an environment, which is basically a mapping from names (the so-called environment variables) to some strings. The environment for the process p is a copy of the environment from the calling process (i.e. your shell script), but enhanced by setting the environment variable a to x, the variable b to y and c to z.
Now you want to set an environment variable having an array as value. This does not work. The value of an environment variable must be a string, because invoking child processes is a general concept (not bound to a certain programming language like bash), and every programming language has some way to deal with a string and is supposed to offer a library function to access the environment (For instance the function getenv when you are doing C programming). We don't even know whether the programming language used to implement your process p does have arrays. Imagine that p is written as POSIX shell scripts - you don't have arrays like you do in bash or zsh, when you are doing POSIX shell.