AI 보이는 추론 실험실

객체를 복사했는데 원본 안의 수량도 바뀌는 이유는?

바깥 객체만 복사한 경우와 안쪽 객체도 복사한 경우를 실행해, 두 변수가 공유하는 자료가 무엇인지 확인합니다.

탐구게시 2026-10-18T23:05:34.867Z읽기·실험 약 8분확인 문제 2개규칙 기반 실행한국논리학협회 자체 제작제작·검수 LTCT 편집부

두 서류철과 하나의 파란 상자를 실로 연결해 보는 두 동료와 옆의 작은 공식 올리
AI 생성 학습 장면입니다. 사진의 자료와 개수는 실측 근거가 아닙니다. · 주제 이해를 돕기 위한 AI 생성 이미지 · LTCT 자체 제작
오늘의 질문

AI가 만든 const copy={...original} 뒤에서 copy.stock.count를 고치면 original.stock.count는 그대로일까요?

바깥 객체는 서로 다르지만 stock 객체를 함께 참조하는 경우와 stock도 별도로 복사하는 경우의 비교
바깥 객체는 서로 다르지만 stock 객체를 함께 참조하는 경우와 stock도 별도로 복사하는 경우의 비교 · 한국논리학협회 자체 제작
그림 크게 보기 ↗
01

복사한 깊이를 확인합니다

가상 재고 자료 original={name:'연필',stock:{count:3}}를 복사한다고 합시다. name에는 문자열이 있고, stock에는 count라는 수량 항목을 가진 안쪽 객체가 있습니다. 객체는 이름과 값을 짝지은 자료 모음입니다. 바깥에 새 객체를 만들었다는 사실만으로 안쪽 객체까지 새로 만들어졌다고 결론 내릴 수는 없습니다.

전개 구문 ...은 여기서 원본의 항목을 새 바깥 객체로 옮깁니다. const copy={...original}이면 original과 copy는 서로 다른 바깥 객체입니다. 하지만 stock의 값은 같은 안쪽 객체를 가리키는 참조입니다. 참조는 객체 자체를 반복해서 만드는 대신 같은 객체를 가리키는 연결로 생각할 수 있습니다.

02

바깥 이름 변경과 안쪽 수량 변경을 나눕니다

아래 활동의 기본값은 ‘바깥만 복사’와 ‘안쪽 수량을 9로 변경’입니다. copy.stock.count=9를 실행하면 두 자료에서 수량이 모두 9가 됩니다. 같은 stock 객체의 count를 고쳤기 때문입니다. 반면 copy.name='지우개'처럼 바깥 항목의 값을 교체하면 원본 이름은 연필로 남습니다. 어느 경로의 항목을 바꿨는지가 중요합니다.

‘stock도 복사’를 선택하면 const copy={...original,stock:{...original.stock}}와 같은 새 구조를 만듭니다. 이제 두 stock 객체가 다르므로 copy 쪽 수량을 고쳐도 original 쪽 수량은 3입니다. 활동은 값 비교와 함께 original===copy, original.stock===copy.stock도 표시합니다. ===는 여기서 두 객체가 같은 객체인지를 확인합니다.

03

이 예시의 수정으로 모든 중첩이 해결되지는 않습니다

stock도 복사하는 방법은 이 예시의 두 층 구조에 맞춘 것입니다. stock 안에 다시 객체가 있으면 그 안쪽 참조는 또 공유될 수 있습니다. AI가 ‘독립적인 복사본’이라고 보고한다면 어떤 깊이의 어떤 항목이 독립적인지 실행 결과와 함께 확인해야 합니다.

활동은 매번 새로운 가상 원본을 만든 뒤 복사 방식과 수정 경로를 적용합니다. 앞선 실험의 9가 다음 실험에 누적되지 않습니다. 메서드·접근자·프로토타입·날짜 객체 등의 복잡한 복사는 다루지 않습니다. JSON 변환을 복사에 쓰려는 경우에도 값의 생략과 변환을 먼저 확인해야 합니다. 이번 묶음의 JSON 실험에서 그런 차이를 비교할 수 있습니다.

직접 확인하기 · 규칙 기반 실행

복사 범위와 수정할 항목 바꾸기

바깥만 복사·안쪽 수량 변경에서 양쪽 수량과 stock의 동일성을 확인합니다. 수정 경로를 바깥 이름으로 바꾸어 원본 이름이 유지되는지 비교합니다. stock도 복사한 뒤 수량을 바꾸고 초기화합니다.

직접 바꾸어 확인하기

원본: {"name":"연필","stock":{"count":9}}

복사본: {"name":"연필","stock":{"count":9}}

original === copy: 거짓 (false)

original.stock === copy.stock: 참 (true)

각 선택 변경 시 새 원본에서 실험합니다.

관계를 읽고, 다른 상황에 적용하기

두 문제로 생각 확인

1바깥만 복사한 뒤 original===copy와 original.stock===copy.stock은?
2이 예시에서 stock도 별도 복사한 뒤 복사본 수량을 9로 바꾸면 원본 수량은?

두 문제의 답을 모두 선택하면 해설을 볼 수 있습니다.

나의 설명으로 마무리

오늘 발견한 관계

0 / 4,000자

메모는 현재 기기의 브라우저에만 보관됩니다. 계정이나 다른 기기에는 동기화되지 않습니다.

출처와 제작 안내

원문을 참고해 설명·도표·문항·실험을 새로 작성했습니다. 별도 표시가 없는 사례와 수치는 학습을 위한 가상 예시입니다. 원문 번역이나 실제 모델의 성능 평가 자료가 아닙니다.

  1. Spread syntax ↗MDNMDN · Spread syntax

    객체 전개는 얕은 복사이며 중첩 객체의 정체성을 보존함. 재고 자료와 2×2 실험은 자체 사례.