'push' is implemented as a Lisp macro:
(defmacro push (val lis) `(setf ,lis (cons ,val ,lis)))
The 'push' macro stores the value of the expression to the front of the list and returns the list.
(setq lst nil) => NIL (push 1 lst) => (1) lst => (1) (push 2 lst) => (2 1) lst => (2 1) (push 3 lst) => (3 2 1) lst => (3 2 1)
See setq. See also the pop macro.