I think it's useful to highlight that this is a much stronger type of immutability than e.g. Java's final, or equivalents in many languages.
If in Java we make a list:
final var list = new ArrayList<Integer>();
we cannot reassign it:
list = new ArrayList<Integer>();
but we can change it just fine in other ways:
list.add(1);
list.add(2);
list.clear();
Rust's Vec is a quite similar datatype Java's ArrayList:
let list = Vec::new();
but we cannot change it at all:
list.push(1);
list.push(2);
list.clear();
gives:
error[E0596]: cannot borrow `list` as mutable, as it is not declared as mutable
We might say that Java (and most others) has shallow immutability, while Rust's is deep.
There are some caveats though, mostly RefCell, Mutex and RwLock.