1. 두 객체의 비교와 복사

 - 객체를 비교할 때 사용할 수 있는 두 가지 연산자

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

 

 - r1 is r2 : r1r2가 참조하는 객체는 같은 객체인가?

 - r1 == r2 : r1r2가 참조하는 객체에 담긴 값은 같은가?

 

- is 연산이 True를 반환하는 상황

 - r2 = r1 : r1이 참조하는 리스트에 r2라는 이름을 하나 붙임

 

- r1 = [‘Arin’, (‘woman’ ‘Korea’), [162, 22]]

- 리스트를 생성하면 리스트 안에 선언되는 값들이 리스트에 들어가 있는 형태가 아니라 각 값들(객체들)을 리스트 내에서 참조하는 형태가 됨

 

- r2 = list(r1)

 : list 함수를 호출하면서 리스트를 전달하였음

     : 전달된 리스트의 내용이 담긴 새로운 리스트가 만들어짐

 ☞ 이러한 형태의 복사를 얕은 복사라고 함

 

 - 얕은 복사

    : 파이썬이 복사를 진행하는 기본적인 방식

    : 값이 변경되지 않는 immutable 함수 (ex. 튜플, 문자열)를 사용하는데 적합함!

 

 

문자열 객체 ‘Arin’
튜플 객체 (‘woman’, ‘Korea’)

 

 - 리스트와 같이 내용을 수정할 수 있는 함수를 얕은 복사하면 문제가 생길 수 있음

 

2. 깊은 복사

 - mutable 함수를 얕은 복사를 하면 생기는 문제 예시

 - 2021Arin의 나이를 22살로 설정

 - 2021년의 Arin의 리스트를 2022년으로 복사한 뒤, 2022, 즉 일 년이 지났을 때 한살이 추가되도록 설정

 - 2021년의 Arin의 정보 : 한 살 더 추가되었음

 - 2022년의 Arin의 정보 : 한 살 더 추가되었음

 

 - , 얕은 복사로 인해 mutable 객체에 저장된 값이 변경될 수 있음

 - 따라서 immutable 함수는 얕은 복사로, mutable 함수는 copy 모듈의 deepcopy를 사용하여 깊은 복사를 해야 함

-  deepcopy를 위해서 copy 함수를 불러옴

- 얕은 복사와 깊은 복사를 확인했음

+ Recent posts