할당 & 얕은 복사 & 깊은 복사

참고 : 널널한 교수의 코딩 클래스


1. 할당 ( a=b)

할당한다 = “데이터의 복사가 발생하는 것은 아니다!”

  • for 데이터의 효율성 증대
  • 참조가 또 이루어지는 것일 뿐, 사본을 만들지 않는다


따라서, a,b가 동일한 객체를 참고하는 상황에서, b를 통해 변경시키게 되면, a도 함께 변경된다

>>> a=[1,2,3]
>>> b=a
>>> print(id(a)==id(b))
True

>>> b[0]=100
>>> a
[100, 2, 3] 


2. 얕은 복사 ( b = a[:] )

a를 복사한 객체를 생성하고, b가 새롭게 생성된 그것을 참조한다

>>> a=[1,2,3]
>>> b=a[:]
>>> print(id(a)==id(b))
False

>>> b[0]=100
>>> a
[1, 2, 3]

>>> print(id(a[2])==id(b[2]))
True


3. 얕은 vs 깊은 복사

(1) 얕은 복사

  • 새 복합 객체를 만들고
  • 원본 객체 내에 있는 오브젝에 대한 “참조를 삽입”한다

figure2


(2) 깊은 복사

  • 새 복합 객체를 만들고
  • 원본 객체 내에 있는 객체에 대한 복사를 “재귀적으로 삽입”한다
  • (복합 객체에 대해서만 적용됨)

figure2


>>> a=[[1,2],[3,4]]

>>> b1=a[:]
>>> b2=copy.deepcopy(a)

>>> print(id(a),id(b1),id(b2))
1719467677312 1719467678336 1719467678464

>>> a[0][0]=10
>>> print(a[0][0], b1[0][0],b2[0][0])
10 10 1