коллеги, а может кто объяснить чем отличается иммутабельность от ребиндинга
В случае Elixir переменная по сути хранит имя/адрес ячейки памяти.
Изменяя переменную вы изменяете только то, на какие данные смотреть нужно, но не сами данные.
Если по счастливой случайности знаете C/любой другой язык с указателями, логика там примерно такая же: меняя указатель меняются ведь не данные, на которые он указывает.
Просто в Эликсире и подобных языках это скрыто, ибо проще использовать