1. 두 객체의 비교와 복사
- 객체를 비교할 때 사용할 수 있는 두 가지 연산자
v1 == v2 | 변수 v1과 v2가 참조하는 객체의 내용이 같은가? |
v1 is v2 | 변수 v1과 v2가 참조하는 객체는 동일 객체인가? |
- r1 is r2 : r1과 r2가 참조하는 객체는 같은 객체인가?
- r1 == r2 : r1과 r2가 참조하는 객체에 담긴 값은 같은가?
- is 연산이 True를 반환하는 상황
- r2 = r1 : r1이 참조하는 리스트에 r2라는 이름을 하나 붙임
- r1 = [‘Arin’, (‘woman’ ‘Korea’), [162, 22]]
- 리스트를 생성하면 리스트 안에 선언되는 값들이 리스트에 들어가 있는 형태가 아니라 각 값들(객체들)을 리스트 내에서 참조하는 형태가 됨
- r2 = list(r1)
: list 함수를 호출하면서 리스트를 전달하였음
: 전달된 리스트의 내용이 담긴 새로운 리스트가 만들어짐
☞ 이러한 형태의 복사를 ‘얕은 복사’라고 함
- 얕은 복사
: 파이썬이 복사를 진행하는 기본적인 방식
: 값이 변경되지 않는 immutable 함수 (ex. 튜플, 문자열)를 사용하는데 적합함!
문자열 객체 | ‘Arin’ |
튜플 객체 | (‘woman’, ‘Korea’) |
- 리스트와 같이 내용을 수정할 수 있는 함수를 얕은 복사하면 문제가 생길 수 있음
2. 깊은 복사
- mutable 함수를 얕은 복사를 하면 생기는 문제 예시
- 2021년 Arin의 나이를 22살로 설정
- 2021년의 Arin의 리스트를 2022년으로 복사한 뒤, 2022년, 즉 일 년이 지났을 때 한살이 추가되도록 설정
- 2021년의 Arin의 정보 : 한 살 더 추가되었음
- 2022년의 Arin의 정보 : 한 살 더 추가되었음
- 즉, 얕은 복사로 인해 mutable 객체에 저장된 값이 변경될 수 있음
- 따라서 immutable 함수는 얕은 복사로, mutable 함수는 copy 모듈의 deepcopy를 사용하여 깊은 복사를 해야 함
- deepcopy를 위해서 copy 함수를 불러옴
- 얕은 복사와 깊은 복사를 확인했음
'윤성우의 열혈 파이썬 (중급)' 카테고리의 다른 글
Story 10. 제너레이터 표현식 (0) | 2021.07.16 |
---|---|
Story 05. Iterable 객체와 Iterator 객체 (0) | 2021.07.15 |
Story 06. 객체처럼 다뤄지는 함수 그리고 람다 (0) | 2021.07.15 |
Story 09. 제너레이터 함수 (0) | 2021.07.15 |
Story 08. 두 함수를 대신하는 리스트 컴프리헨션 (0) | 2021.07.14 |