books/윤성우-중급-파이썬

깊은 복사와 얕은 복사

study_recode 2025. 3. 12. 23:39

두 객체의 비교와 복사

  • v1 == v2, 변수 v1과 v2가 참조하는 객체의 내용이 같은가?
  • v1 is v2, 변수 v1과 v2가 참조하는 객체는 동일 객체인가?

객체 복사

얕은 복사

r1 = ['John', ('man', 'USA'), [175, 23]]
r2 = list(r1)
print(r1 is r2)
print(r1[0] is r2[0])
print(r1[1] is r2[1])
print(r1[2] is r2[2])

  • r2는 r1가 참조하고 있는 값만 복사할 뿐 실제 객체를 복사한건 아니다(얕은 복사) 

깊은 복사

J2021 = ['John', ('man', 'USA'), [175, 23]]
J2022 = list(J2021)
J2022[2][1] +=1 
print(J2021)
print(J2022)

J2021 = ['John', ('man', 'USA'), [175, 23]]
import copy
J2022 = copy.deepcopy(J2021)
J2022[2][1] +=1 
print(J2021)
print(J2022)
print((J2021[0] is J2022[0]) and (J2021[1] is J2022[1]))
print(J2021[2] is J2022[2])

파이썬은 deepcopy 함수 호출하면 immutable 객체는 얕은 복사, mutable 객체는 깊은 복사가 진행된다.