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으로 변경했는데 원본을 찍었더니 원본 그대로 나옵니다.

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

반응형

댓글 0