class | 설명 | 구분 |
---|
list | mutable 한 순서가 있는 객체 집합 | mutable |
set | mutable 한 순서가 없는 고유한 객체 집합 | mutable |
dict | key와 value가 매핑된 객체, 순서 없음 | mutable |
bool | 참, 거짓 | immutable |
int | 정수 | immutable |
float | 실수 | immutable |
tuple | immutable 한 순서가 있는 객체 집합 | immutable |
str | 문자열 | immutable |
frozenset | immutable 한 set | immutable |
- 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)
>>> a = [[1,2], [3,4]]
>>> b = a[:]
>>> id(a)
4395624328
>>> id(b)
4396179592
>>> id(a[0])
4396116040
>>> id(b[0])
4396116040
id(a)
값과 id(b)
값은 다르게 되었지만 그 내부의 객체 id(a[0])
과 id(b[0])
은 같은 주소를 가리키고 있다.(id값은 다르지만 id가 가리키는 메모리 주소가 같다.)
- 재할당하는 경우는 문제가 없다. 메모리 주소도 변경되었다.
>>> a[0] = [8,9]
>>> a
[[8, 9], [3, 4]]
>>> b
[[1, 2], [3, 4]]
>>> id(a[0])
4393788808
>>> id(b[0])
4396116040
- copy 모듈의 copy 메소드의 디폴트는
얕은 복사
다.
>>> import copy
>>> a = [[1,2],[3,4]]
>>> b = copy.copy(a)
>>> a[1].append(5)
>>> a
[[1, 2], [3, 4, 5]]
>>> b
[[1, 2], [3, 4, 5]]
- 깊은 복사는 내부의 객체들까지 모두 새롭게 copy가 되는 것으로 새로 다른 객체가 생성된다고 이해하면 된다.
>>> import copy
>>> a = [[1,2],[3,4]]
>>> b = copy.deepcopy(a)
>>> a[1].append(5)
>>> a
[[1, 2], [3, 4, 5]]
>>> b
[[1, 2], [3, 4]]