[자료구조] 자료구조, 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)

거북이·2023년 8월 19일
0

Python

목록 보기
17/26
post-thumbnail
class설명구분
listmutable 한 순서가 있는 객체 집합mutable
setmutable 한 순서가 없는 고유한 객체 집합mutable
dictkey와 value가 매핑된 객체, 순서 없음mutable
bool참, 거짓immutable
int정수immutable
float실수immutable
tupleimmutable 한 순서가 있는 객체 집합immutable
str문자열immutable
frozensetimmutable 한 setimmutable
  • 얕은 복사(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]]

0개의 댓글