Ctrl+Shift+L : 선택 단어 전체 지정
Control + d : 선택 단어 순차적으로 지정
Shift + Tab : 선택 line 왼쪽으로 당기기
객체에는 mutable 한 객체와 immutable 한 객체가 있다.
class | 설명 | 구분 |
---|---|---|
list | 순서가 있는 객체 집합 | mutable |
set | 순서가 없는 고유한 객체 집합 | mutable |
dictionary | key , value가 매핑된 객체 | mutable |
mutable에 속한 객체들은 값이 변경될 때 객체의 값이 변경된다. (call by reference 속성)
(메모리 주소 값이 동일하다.)
class | 설명 | 구분 |
---|---|---|
boolean | 참과 거짓 | immutable |
int | 정수 | immutable |
float | 실수 | immutable |
tuple | 순서가 있는 객체 집합 | immutable |
string | 문자열 | immutable |
frozenset | immutable한 set | immutable |
immutable에 속한 객체들은 값이 변경될 때 객체가 변경된다. (call by value 속성)
(메모리 주소 값이 다르다 == 객체가 변경되었다.)
주의할 점은 immutable 객체도 같은 메모리를 바라보게 된다. 하지만 b에 다른 값을 할당하게 되면 재할당이 이루어지며 메모리 주소가 변경된다.
list의 슬라이싱을 통한 새로운 값을 할당해보자.
list를 슬라이싱하게 되면 새로운 메모리주소가 할당되며 서로 영향을 받지 않게 된다. 그런데 이 때, id(a)
와 id(b)
의 값은 다르게 되었지만 id(a[0])
과 id(b[0])
은 같은 주소를 바라보고 있는 것을 확인할 수 있다. 그러므로 b[0]
에 2를 추가하여도 a[0]
가 동일하게 변경되는 것을 예상할 수 있다.
(copy모듈의 copy 메소드 또한 이러한 방식으로 작동한다.)
Shallow Copy란 객체를 새로운 객체로 복사하지만, 객체 안에 참조타입의 원소가 있으면 그 원소는 있다면 참조값만 복사된다.(call by value 방식)
copy모듈을 import 하고 deepcopy 메소드를 사용해보자.
Shallow Copy 와 다르게 a[0] 의 주소값과 b[0]의 주소값이 같지 않으며, 그 결과 b[0]에 2를 추가하여도 a[0]에 반영되지 않는다.
Deep Copy는 객체가 가진 원소의 값과 참조형식을 모두 복사하는 방식이다.