>>7
delete はリストに対しては破壊的な操作を行うので仕様的に正しいです。

あとは、data2 に data1 の値を設定してるけど、リストの先頭の位置の値をコピーしてるだけなので
data2 の指すリスト自体を作り替えた場合 data1 が指してるリストも同じなので影響を受けます。

'((1 . 1) (2 . 2) (3 . 3)) に対して (1 . 1) の delete を行った場合、
'((1 . 1) . ((2 . 2) . ((3 . 3)))) の ((2 . 2) . ((3 . 3))) の部分が戻されるだけでリストは壊されず、
data1 は相変わらず先頭をさしたままなので何事も影響ないような感じになるけど
(2 . 2) とかの先頭じゃない部分の delete の場合、'((1 . 1) . ((3 . 3))) にリストが繋ぎ変えられるので。