반응형

안녕하세요 Hi Create입니다!

오늘은 파이썬 기초 21번째 글을 쓰게 되었는데요. 바로 객체 복사에 대한 내용입니다.

프로그래밍을 하다보면 기존의 변수를 변경하거나 복사해서 만드는 경우가 있습니다.

파이썬에서는 변수 자체를 등호로 넣는 방식과 모듈을 사용하는 방식이 있어 글을 써보았습니다.


파이썬에서는 크게 두 종류로 나누어 놓았습니다. 바로 레퍼런스 복사와 실제 객체 복사입니다.

레퍼런스 복사는 객체를 그대로 두고 주소만 복사하는 겁니다.

a = 1
b = a

위와 같은 코드에서 a라는 변수에 1이 저장되어 있다는 것은 우리가 a라는 변수에 1이 있는 주소를 저장했다는 의미입니다. 그렇기 때문에 b = a를 하게 되면 객체인 '1'이 저장되어 있는 주소를 b에 복사하게 되는 것이죠

그래서 a를 통해 객체 '1'을 '2'로 수정하게 되면 b를 호출했을 때 2가 나오게 됩니다.

리스트 상태에서 확인해보실 수 있습니다.

그렇다면 이 상태에서 슬라이싱을 하면 어떻게 될까요? 슬라이싱을 하면서 다른 객체에 저장하면 '복사'가 아닙니다.

A = [10,20,30,40,50]
B = A[2:4]

위의 코드는 아예 다른 객체를 만들어 일부만 옮기기 때문에 관계가 없는 객체가 됩니다.

또 copy 모듈을 사용해서 복사할 수도 있습니다.

copy 모듈에는 copy와 deepcopy가 있는데 copy가 레퍼런스 복사 방식입니다.

import copy
a = [1,2,3]
b = [a,40,50,60]
c = copy.copy(b)

 

다음은 실제 객체의 복사인데요

실제 객체의 복사는 원래 존재하는 객체와 똑같은 객체를 하나 더 만든다고 생각하시면 됩니다.

이것은 copy 모듈의 deepcopy를 통해 사용할 수 있습니다.

import copy
a = [1,2,3]
b = [a,40,50,60]
c = copy.deepcopy(b)

이렇게 객체의 복사에 대해 알아봤습니다. 다음 번엔 자료형의 변환에 대해 알아보도록 하겠습니다

감사합니다!

반응형

BELATED ARTICLES

more