Эликсир является неизменным языком, поэтому идиоматический способ таков:
clone = original
Нет необходимости «клонировать».Данные, присвоенные существующим переменным, не могут быть отредактированы, поэтому при назначении одной переменной другой концептуально получается копия данных.Вы не можете редактировать существующие данные - если вы переназначаете существующую переменную, вы концептуально указываете эту переменную на новую структуру данных.
original = [1, 2, 3] |> IO.inspect(label: "original")
clone = original |> IO.inspect(label: "clone")
prepended = [0 | original] |> IO.inspect(label: "prepended")
original |> IO.inspect(label: "original again")
original = [5, 6, 7] |> IO.inspect(label: "original rebound")
clone |> IO.inspect(label: "clone again")
Вывод:
original: [1, 2, 3]
clone: [1, 2, 3]
prepended: [0, 1, 2, 3]
original again: [1, 2, 3]
original rebound: [5, 6, 7]
clone again: [1, 2, 3]