;; assoc の引数が1以外だとdata1が書き換えられる。
(setq data1 '((1 . 1)(2 . 2)(3 . 3)))
(let ((data2 data1))
(setq data2 (delete (assoc 1 data2) data2)))

これは仕様なのでしょうか。