파이썬 -Deepcopy

2023. 1. 7. 16:09CS

알고리즘을 풀다보면 배열을 복사할때가 생기는데

배열한 원본의 데이터를 변경하게 되면 복사한 배열도 변경되는 경우가 있다.

그래서 파이썬의 Copy에 대해서 포스팅을 해보도록 하겠다.

 

Mutable /  Immutable

저번 파이썬의 메모리편에서 설명했듯이 파이썬에서 변수는 자신에게 대입된 객체를 가리키는 포인터의 역할을 한다.

파이썬은 변수에 저장공간을 할당받는게 아니라 가리키는 객체의 주소를 알고있는것이다.

Mutable은 "변한다" 라는 뜻이고 Immutable은 "변하지않는다"라는 뜻이다.

 

대부분의 자료형은 Immutable의 특징을 띄고있어서 객체가 생성되고 값이 수정이 안되고, 재할당의 과정을 통해 변수의 값을 변경할 수 있다.

Mutable한 객체는 List가 있다.

보통 "="을 활용해 값을 할당하는데 이렇게 리스트를 복사 후

원본이나 복제본의 데이터를 변경하게 된다면 원본 복제본 둘다 영향을 받게 된다.

a = 1
b= a
print("a =",a,"b =",b)
a = 2
print("---a값을 2로 변경---")
print("a =",a,"b =",b)

c = [1,2,3,4,5]
d = c
print("c =",c)
print("c =",d)

print("c의 2번째 값을 9로 변경")
c[1] = 9
print("c =",c)
print("c =",d)

[얕은 복사(Shallow Copy) 와 깊은 복사(Deep Copy)]

얕은 복사는 원본 객체의 주소값을 복사하는 "="와 같은 역할을 하고

깊은 복사는 원본의 값 그대로를 새로운 메모리에 저장하여 그 위치를 할당받는것이다.

import copy

c = [1, 2, 3, 4]
d = copy.deepcopy(c)
d[1] = 0
print("------깊은 복사------")
print("c =",c)
print("d =",d)

이제야 비로소 우리가 의도한 그러한 복사가 된것이다.

 

https://crackerjacks.tistory.com/14

'CS' 카테고리의 다른 글

C프로그래밍 - 입력  (0) 2023.01.09
C프로그래밍 - 변수와 할당  (0) 2023.01.09
파이썬의 메모리 구조  (0) 2023.01.05
REST API란?  (0) 2023.01.04
API란?  (0) 2023.01.04