The
shadowing
of a variable is an overwrite of an existing variable.
When shadowing a variable, we redefine the variable by reusing the same
name to define a new variable.
The definition of the new variable marks the end of scope of the previous
variable and the start of scope of the new one.
In the following example, the variable x is shadowed on the second line.
Its value is then "abc", and the previous has been freed.
let x = 1;
println!("{x}");
let x = "abc";
println!("{x}");1
abc