모든 언어로 개체를 복사하는 방법에는 깊은 복사와 얕은 복사의 두 가지가 있습니다.
얕은 복사와 깊은 복사는 언어에 구애받지 않습니다. 얕은 사본은 가능한 한 적게 복제합니다. 컬렉션의 얕은 복사본은 요소가 아니라 컬렉션 구조의 복사본입니다. 얕은 사본으로 두 개의 컬렉션이 이제 개별 요소를 공유합니다.
예시
let innerObj ={ a:'b', c:'d'}let obj ={ x:"test", y:innerObj}// 얕은 copy를 생성합니다. copyObj =Object.assign({}, obj);// copyObj와 obj의 prop y는 이제 동일한 innerObj를 참조합니다. 이에 대한 모든 변경 사항은 반영됩니다.innerObj.a ="test"console.log(obj)console.log(copyObj)
출력
이것은 출력을 줄 것입니다 -
{ x:'테스트', y:{ a:'테스트', c:'d' } }{ x:'테스트', y:{ a:'테스트', c:'d' } }사전>얕은 복사본은 복제를 재귀적으로 만들지 않습니다. 최상위 수준에서만 수행됩니다.
깊은 복사는 모든 것을 복제합니다. 컬렉션의 전체 복사본은 원본 컬렉션의 모든 요소가 복제된 두 개의 컬렉션입니다.
예시
let innerObj ={ a:'b', c:'d'}let obj ={ x:"test", y:innerObj}// 딥 카피 생성.let copyObj =JSON.parse(JSON.stringify (obj))// copyObj와 obj의 prop y는 이제 동일한 innerObj를 참조합니다. 이에 대한 모든 변경 사항은 반영됩니다.innerObj.a ="test"console.log(obj)console.log(copyObj)출력
이것은 출력을 줄 것입니다 -
{ x:'테스트', y:{ a:'테스트', c:'d' } }{ x:'테스트', y:{ a:'b', c:'d' } }사전>