[Python]Copy , mutable 이해 하기
아래 링크를 참조하여 공부 목적으로 작성한 글입니다.
레벨업 파이썬
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는 동일한 객체를 공유하기 때문에 메모리를 아낄 수 있고 실행 속도도 더 빠르다!
Author And Source
이 문제에 관하여([Python]Copy , mutable 이해 하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@woodywarhol9/PythonCopy-mutable-이해-하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)