Semántica de movimiento
Una asignación transferirá su ownership entre variables:
fn main() { let s1: String = String::from("Hola!"); let s2: String = s1; println!("s2: {s2}"); // println!("s1: {s1}"); }
- La asignación de 
s1as2transfiere el ownership. - Cuando 
s1queda fuera del ámbito, no ocurre nada: no le pertenece nada. - Cuando 
s2sale del ámbito, los datos de la cadena se liberan. - Siempre hay exactamente un enlace a variable que posee un valor.
 
- 
Menciona que es lo contrario de los valores predeterminados de C++, que se copian por valor, a menos que utilices
std::move(y que el constructor de movimiento esté definido). - 
Es únicamente el ownership el que se mueve. Si se genera algún código máquina para manipular los datos en sí, se trata de una cuestión de optimización, y esas copias se optimizan de forma agresiva.
 - 
Los valores simples (como los enteros) se pueden marcar como
Copy(consulta las diapositivas posteriores). - 
En Rust, la clonación es explícita (usando
clone).