inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[왕초보] [누적 5,000명+] Python 프로그래밍 기초 완성 로드맵

얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)의 차이

해결된 질문

227

윤정희

작성한 질문수 3

2

얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)의 차이가 뭘까요??

python 머신러닝 빅데이터 인공지능(ai) ax(에이전트-경험)

답변 2

1

Selena

안녕하세요. 셀레나입니다.

 

얕은 복사와 깊은 복사는 객체를 복사하는 방식의 차이입니다.

  • 얕은 복사(Shallow Copy) 는 바깥 객체만 새로 만들고, 내부에 포함된 객체들은 원본과 동일한 참조를 공유합니다.
    따라서 중첩된 구조(예: 리스트 안의 리스트)가 있을 경우, 내부 객체를 수정하면 원본에도 영향을 미칩니다.

  • 깊은 복사(Deep Copy) 는 객체뿐 아니라 내부에 포함된 모든 객체까지 재귀적으로 새로 복사합니다.
    따라서 복사본을 수정해도 원본에는 영향을 주지 않습니다.

 

즉, 단순한 1차원 구조에서는 차이가 잘 드러나지 않지만,
중첩 구조에서는 내부 객체의 공유 여부가 핵심 차이입니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 윤정희님.

파이썬에서 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)는 객체를 복사하는 방식에서 중요한 개념입니다. 두 방식의 주요 차이점을 간단히 설명드리겠습니다.

  1. 얕은 복사:

    • 얕은 복사는 원본 객체의 상위 레벨 객체만 복사하고, 하위 레벨 객체(예: 리스트 내의 리스트)는 같은 메모리 주소를 참조하게 됩니다.
    • 따라서 상위 레벨 객체를 수정해도 하위 레벨 객체는 원본과 동일한 객체를 공유하게 되므로, 하위 객체의 수정은 원본에 영향을 미칠 수 있습니다.
    • 파이썬에서는 copy 모듈의 copy() 함수를 사용하여 얕은 복사를 수행할 수 있습니다.
  2. 깊은 복사:

    • 깊은 복사는 원본 객체와 동일한 구조의 새로운 객체를 생성하고, 하위 객체들까지 모두 새롭게 복사해냅니다.
    • 따라서 깊은 복사를 수행한 후에는 원본 객체와 복사된 객체가 완전히 독립적이므로, 한 객체의 수정이 다른 객체에 영향을 주지 않습니다.
    • 파이썬에서는 copy 모듈의 deepcopy() 함수를 사용하여 깊은 복사를 수행할 수 있습니다.

예를 들어, 다음과 같은 리스트 a에 대해 설명드리면:

import copy

a = [[1, 2, 3], [4, 5, 6]]

# 얕은 복사
b = copy.copy(a)

# 깊은 복사
c = copy.deepcopy(a)

a[0][0] = 10

print(b)  # [[10, 2, 3], [4, 5, 6]]
print(c)  # [[1, 2, 3], [4, 5, 6]]

위의 코드에서 b는 얕은 복사본이므로 a의 변경사항이 반영되지만, c는 깊은 복사본이라 원본의 변화와 무관하게 그대로 유지됩니다.

더 자세한 설명과 예제를 원하신다면, 관련 강의 자료를 참고하시면 도움이 되실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

빅카인즈 open ai 서비스 유료로 전환됐어요ㅠㅠ

0

6

1

3회 기출(작업형 2) 질문 있습니다!!

0

11

1

프로젝트 폴더 복사 후 사용 관련

0

7

1

영상 안나와요

0

10

0

기술스택 강의 관련해서 질문드려요.

0

12

1

2유형 탬플릿에 대한 질문입니다

0

16

1

강의 자료를 찾을 수 없습니다ㅠㅠ

0

12

1

서브에이전트 문의

0

12

1

노션 강의 화면과 실제 화면과 너무 달라서 수업 진행이 안 됩니다

0

15

0

파이썬 문법과 기본 개념을 학습한 이후에는 어떤 방향으로 심화 학습을 하는 것이 좋을지 궁금합니다.

1

75

1

리스트를 복사할 때 a = b 와 a = b[:] 의 차이는 무엇인가요?

1

84

1

파이썬에서 객체의 참조(reference)와 할당(assignment)의 차이

2

99

1

파이썬에서 함수의 매개변수 기본값을 설정할 때 주의해야 할 점은 무엇인가요?

1

79

2

변수 선언에 관련한 질문.

1

92

2

for-else는 언제 쓰나요?

1

87

2

요즘 바이브코딩이 대세인데 파이썬을 배워야하는 이유가 뭘까요?

1

247

1

코드에서 오류를 찾는 팁이 있을까요?

2

79

2

순회 중 리스트 수정은 왜 위험한지 궁금합니다.

1

88

2

range함수 관련

2

119

1

포맷팅 질문

2

61

1

if 질문

2

90

1

set 질문

2

72

2

딕셔너리 반복자 질문

2

62

1

클래스 질문

2

70

1