programming/python

얕은 복사(shallow copy) / 깊은 복사(deep copy)

chanchand 2023. 8. 6. 14:00
반응형

shallow copy

값이 할당되는 것이 아니라 같은 메모리 주소를 바라봄

 

- list

a = [1, 2, 3]
b = a # shallow copy

b[0] = 7

print(a) #[7, 2, 3)

 

아래와 같이 슬라이싱을 통해 할당하면 새로운 id가 부여됨

id(a)와 id(b)는 다르지만 내부 객체 id(a[0])과 id(b[0])은 같은 주소를 바라봄

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

 

그렇기 때문에 재할당하는 경우에는 문제가 생기지 않지만, a[1] 값을 변경하면 b[1] 값도 따라서 변경됨

a[0] = [8, 9]
print(b) # [[1, 2], [3, 4]]

a[1].append(4)
print(b) #[[1, 2], [3, 4, 4]]

 

*copy 모듈의 copy 메서드 또한 얕은 복사임

 

 

deep copy

깊은 복사는 내부 객체들까지 모두 새롭게 copy 되는 것

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

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

 

반응형

'programming > python' 카테고리의 다른 글

requests.get  (0) 2023.09.22
a-z 출력  (0) 2023.08.08
비트연산자  (0) 2023.08.05
우선순위 큐 - PriorityQueue, heapq  (0) 2023.08.03
[Error] 런타임 에러 (RecursionError)  (0) 2023.07.28