[Python]Copy , mutable 이해 하기

woodywarhol9·2021년 7월 5일
0

Python

목록 보기
1/2

아래 링크를 참조하여 공부 목적으로 작성한 글입니다.

레벨업 파이썬
Python 객체 지향 이해하기
공학자를 위한 Python
Shallow Copy와 Deep Copy


Python을 기초부터 공부하면서 자꾸만 Copy, mutable 개념이 헷갈려서 관련된 내용을 모아서 정리해 본다.

1. 변수와 객체

Python에서 변수는 할당된 객체의 주소를 가리킨다.

a = 3

위 코드가 실행되면 먼저 3이라는 정수 타입의 객체가 메모리에 할당 된다.
이때 할당된 메모리 속 객체의 주소를 a라는 변수가 가리키며 이를 바인딩(binding) 이라 한다.

2. 객체의 유형


➕ ndarray : mutable

Python에서 객체는 생성 후에 값을 변경할 수 있는 지 여부로 두가지 유형으로 나뉜다.

mutable : 변경 가능
immutable : 변경 불가능

객체의 값을 변경할 수 있다는 것은 값을 변경하더라도 같은 메모리상의 주소를 가진다는 것이다.

따라서 실제 코드 실행 시 다음과 같은 결과를 얻을 수 있다.

x = [1,2,3]
y = x
print(id(x))
print(id(y))
y[0] = 3
print(id(y))
print(id(x))

2062815432192
2062815432192
2062815432192
2062815432192

객체의 값을 변경할 수 없는 경우는 어떨까? 객체와 바인딩된 변수를 이용하여 이해하면 쉽다.

>> x = 1
>> y = x
>> id(1)
140706521527120
>> id(x)
140706521527120
>> id(y)
140706521527120
>> y += 3
>> id(y)
140706521527216

객체의 값을 변경할 수 없기 때문에 변수는 결국 다른 객체에 바인딩된다.

3. Deep, Shallow Copy

사진 한장으로 Deep, Shallow Copy가 무엇인지 알 수 있을 것이다.

Shallow Copy의 경우 동일한 객체를 가리키기 때문에 mutable 변수를 다룰 때 주의해야 한다.

왜 Why?(🐿️) 객체의 값 변경이 가능해 한 변수에서의 변화가 다른 변수에도 영향

👉Deep Copy 활용

그럼 Shallow Copy는 왜 있는 걸까❔❔

Shallow Copy는 동일한 객체를 공유하기 때문에 메모리를 아낄 수 있고 실행 속도도 더 빠르다!

0개의 댓글