Dart, Flutter

얕은 복사(shallow copy), 깊은 복사(deep copy)

옥수수빵 2022. 1. 11. 14:03
728x90
void main() {
  List<int> list1 = [1, 2, 3, 4];
  List<int> test1 = list1;
  test1[0] = 10;
  print(list1);

  List<int> list2 = [1, 2, 3, 4];
  List<int> test2 = [...list2];
  test2[0] = 10;
  print(list2);
}

위가 얕은 복사고 아래가 깊은 복사입니다.

얕은 복사일 경우는 test1에 list1을 복사를 하지만 메모리 주소를 공유합니다.

쉽게 생각하려면 얕은 복사 = 공유(도깨비 공유 아님)를 생각하시면 됩니다.

아프냐? 나도 아프다.

그래서 밑에 test1의 첫 번째 값인 1을 10으로 변경하고 원본인 list1을 찍었더니 바뀐 값이 나오는 것입니다.

 

아래는 깊은 복사입니다.

깊은 복사는 아예 값 전체를 갖고 와서 너는 너고 나는 나다라는 그렇게 보시면 됩니다. 때문에 메모리 상의 주소도 완전히 달라집니다.

마찬가지로 얕은 복사처럼 원본(list2) 값을 test2 변수에 복사하고 test2의 첫 번째 값을 10으로 변경했는데 원본을 찍었더니 원본 그대로 나옵니다.

스프레드 연산자 덕분? 때문?입니다.

반응형