rename set! to copy! and implement