TIL

배고픈메꾸리·2020년 10월 8일
0

인턴생활 

목록 보기
1/9

vscode 단축키


Ctrl+Shift+L : 선택 단어 전체 지정
Control + d : 선택 단어 순차적으로 지정
Shift + Tab : 선택 line 왼쪽으로 당기기



Deep Copy vs Shallow Copy


객체에는 mutable 한 객체와 immutable 한 객체가 있다.

1. mutable

class설명구분
list순서가 있는 객체 집합mutable
set순서가 없는 고유한 객체 집합mutable
dictionarykey , value가 매핑된 객체mutable

mutable은 변경 가능한 객체이다.

mutable에 속한 객체들은 값이 변경될 때 객체의 값이 변경된다. (call by reference 속성)

(메모리 주소 값이 동일하다.)

<변수 간 대입>

2. immutable

class설명구분
boolean참과 거짓immutable
int정수immutable
float실수immutable
tuple순서가 있는 객체 집합immutable
string문자열immutable
frozensetimmutable한 setimmutable

immutable은 변경 불가능한 객체이다.

immutable에 속한 객체들은 값이 변경될 때 객체가 변경된다. (call by value 속성)

(메모리 주소 값이 다르다 == 객체가 변경되었다.)

<변수 간 대입>

주의할 점은 immutable 객체도 같은 메모리를 바라보게 된다. 하지만 b에 다른 값을 할당하게 되면 재할당이 이루어지며 메모리 주소가 변경된다.

3. Shallow Copy

list의 슬라이싱을 통한 새로운 값을 할당해보자.

list를 슬라이싱하게 되면 새로운 메모리주소가 할당되며 서로 영향을 받지 않게 된다. 그런데 이 때, id(a)id(b)의 값은 다르게 되었지만 id(a[0])id(b[0])은 같은 주소를 바라보고 있는 것을 확인할 수 있다. 그러므로 b[0]에 2를 추가하여도 a[0]가 동일하게 변경되는 것을 예상할 수 있다.
(copy모듈의 copy 메소드 또한 이러한 방식으로 작동한다.)

Shallow Copy란 객체를 새로운 객체로 복사하지만, 객체 안에 참조타입의 원소가 있으면 그 원소는 있다면 참조값만 복사된다.(call by value 방식)

4. Deep Copy

copy모듈을 import 하고 deepcopy 메소드를 사용해보자.


Shallow Copy 와 다르게 a[0] 의 주소값과 b[0]의 주소값이 같지 않으며, 그 결과 b[0]에 2를 추가하여도 a[0]에 반영되지 않는다.

Deep Copy는 객체가 가진 원소의 값과 참조형식을 모두 복사하는 방식이다.

profile
FE 개발자가 되자

0개의 댓글