할당 & 얕은 복사 & 깊은 복사
참고 : 널널한 교수의 코딩 클래스
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) 얕은 복사
- 새 복합 객체를 만들고
- 원본 객체 내에 있는 오브젝에 대한 “참조를 삽입”한다
(2) 깊은 복사
- 새 복합 객체를 만들고
- 원본 객체 내에 있는 객체에 대한 복사를 “재귀적으로 삽입”한다
- (복합 객체에 대해서만 적용됨)
>>> 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