러스트 입문 3일차입니다. String 하나 다른 변수에 넣고 원본을 출력했는데 컴파일이 안 돼요. C나 파이썬 쓰던 감각으론 도무지 이해가 안 됩니다.


fn main() {
    let s = String::from("hello");
    let s2 = s;
    println!("{}", s);
}


에러 메시지는 이겁니다.


error[E0382]: borrow of moved value: `s`


s2에 대입만 했을 뿐인데 왜 s가 사라진 것처럼 취급되나요? 그냥 복사되는 거 아니었나요? 정수로 똑같이 해보니까 그건 또 에러가 안 나더라고요. 이 둘의 차이랑 s를 계속 쓰려면 어떻게 해야 하는지 알려주세요.