The ANSI CL Specification wrote:DEFPARAMETER and DEFVAR establish name as a dynamic variable. DEFPARAMETER unconditionally assigns the initial-value to the dynamic variable named name. DEFVAR, by contrast, assigns the initial-value (if supplied) to the dynamic variable named name only if name is not already bound.

The only possible explanation is that there already was the SYMBOL-VALUE (1 2 3) bound to the symbol FOO before DEFVAR, in this case DEFVAR does nothing. Use DEFPARAMETER if you want to redefine the SYMBOL-VALUE of arbitrary bound or unbound Common Lisp symbols.