[1. 개요]
python 에서 얕은 복사와 깊은 복사 개념에 대한 내용 정리
[2. 기본 개념]
C++ 를 예로들면, 어떤 객체가 있고 이 객체에 대한 포인터가 있다.
이 객체에 대해서
- 깊은 복사는 객체를 구성하는 모든 멤버 변수 데이터까지 복사하는 것이고,
- 얕은 복사는 객체를 가리키는 포인터를 복사하는 것이다.
즉, 깊은 복사 후 해당 객체에 대한 값 변경은 복사에 대상이 된 원래 객체의 데이터 변경을 유도하지 않는다.
그러나 얕은 복사 후 해당 객체에 대해서 동일한 작업을 진행하면 원래 객체의 데이터 변경까지 유도한다.
[3. 예제]
2차원 배열을 선언한다 했을 때...
# shallow copy
board1 = [[0, 0, 0]] * 100000
# deep copy
board2 = [[0, 0, 0] for i in range(100000)]
board1[0][0] = 10
board1[2][0] = 5
print(board1[0][0], board1[1][0], board1[2][0])
# output: 5 5 5
board2[0][0] = 10
board2[2][0] = 5
print(board2[0][0], board2[1][0], board2[2][0])
# output: 10 0 5
[0, 0, 0] 이라는 리스트는 하나의 객체(혹은 객체의 주소)라 보고,
리스트에 대해서 * 연산은 리스트내 원소를 얕은 복사로 복사 시킨다.
즉, board1 = [obj, obj, obj] 이런 형태이며, obj 는 모두 같은 객체를 가리키게 된다.
for 문을 이용한 경우는 깊은 복사를 하여 의도한 대로 값이 출력됨을 확인 할 수 있다.
'Python' 카테고리의 다른 글
[python] bearing (0) | 2024.03.27 |
---|---|
[python] haversine distance (0) | 2024.03.27 |
python. io 성능 (0) | 2023.10.04 |
python. 유용한 코드 (0) | 2023.09.07 |
Package datetime (0) | 2021.11.16 |