Классы

; Clojure has nothing to copy: a value is immutable and can be shared safely

(defrecord Shape [line-count name])

(def square (->Shape 4 "Square"))
(def square-copy square)
(println (identical? square square-copy))  ; true, one value for two names

; a "changed copy" is a new value built by assoc
(def triangle (assoc square :line-count 3 :name "Triangle"))
(println (:name triangle) (:line-count triangle))  ; Triangle 3
(println (:name square) (:line-count square))      ; Square 4