Почему Rust допускает мутацию через поле ссылки с использованием неизменяемой привязки?

аю второе издание Rust Book и нашел следующий пример в разделе итераторов:

let v1 = vec![1, 2, 3];
let v1_iter = v1.iter();    
for val in v1_iter {
    println!("Got: {}", val);
}

Почему компилятор не жалуется, чтоv1_iter неизменен? В книге говорится, что цикл for стал владельцемv1_iter и сделал его изменчивым за кулисами, но можете ли вы преобразовать неизменяемую переменную в изменяемую?