본문 바로가기
Language/Python

Python ) Assignment vs. Shallow Copy vs. Deep Copy

by nyum76 2026. 1. 9.

Assignment (할당)

= 를 사용해 할당한다

두 변수는 메모리 상에서 동일한 객체를 가리킨다

값을 변경하면 변경된 값을 두 변수가 가리키는 것이므로 모두 같은 내용이 나온다

a = [1, 2, [3, 4]]
b = a

a.append(5)
a[2].append(6)

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

 

Shallow Copy (얕은 복사)

[:] 또는 copy.copy() 를 사용한다 ( copy.copy()copy 모듈을 사용 )

최상위 컨테이너는 새 객체로 생성하지만(복사) 내부 객체는 참조한다

단순 리스트 추가독립적이지만 내부 중첩 리스트를 수정하면 함께 변경된다

import copy

a = [1, 2, [3, 4]]
b = a[:] # 또는 copy.copy(a)

a.append(5)
a[2].append(6)

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

 

Deep Copy (깊은 복사)

copy.deepcopy() 를 사용한다

내부에 포함된 모든 객체까지 재귀적으로 새 객체를 생성한다(복사)

원본과 복사본은 완전히 독립된 메모리 공간을 가져 서로 영향을 주지 않는다

import copy

a = [1, 2, [3, 4]]
b = copy.deepcopy(a)

a.append(5)
a[2].append(6)

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

 


정리

항목 할당 (Assignment) 얕은 복사 (Shallow Copy) 깊은 복사 (Deep Copy)
방법 b = a a[:],
copy.copy()
copy.deepcopy()
특징 동일 객체 참조 최상위만 새 객체 모든 층위 새 객체
내부 객체 영향 원본 변경 시 함께 변경됨 중첩 객체 변경 시 함께 변경됨 완전 독립되어 영향 없음