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으로 변경했는데 원본을 찍었더니 원본 그대로 나옵니다.
스프레드 연산자 덕분? 때문?입니다.
반응형
'Programming > Dart, Flutter' 카테고리의 다른 글
Flutter에서 hyperlink 구현하기 (0) | 2022.01.13 |
---|---|
캐스케이드(Cascade Notation) (0) | 2022.01.11 |
ListView (0) | 2021.12.30 |
Error: The argument type 'String' can't be assigned to the parameter type 'Uri'. (0) | 2021.12.30 |
Function(optional parameters, named parameters) (0) | 2021.01.29 |
Comments