<aside> 💡 모든 파이썬 객체는 unique한 id 값을 가지고 있다! 메모리 주소라고 생각하면 된다.
</aside>
"""
대입연산 실행 시,
1) 임의의 메모리 공간을 할당
2) 값을 해당 메모리 공간에 저장
3) 대입 당하는 변수 이름이 해당 메모리 공간을 가리키도록 지정
"""
a = 12345
b = 12345
id(a) # 139793185626288 실행할 때마다 달라짐
id(b) # 139793184743568 실행할 때마다 달라짐
a = 12345 # 새로운 메모리 할당!
id(a) # 위의 id 값과 다름
b = a # b가 a의 메모리 주소를 참조한다. 절대 값을 copy해서 대입하는 것이 아님!
b is a # True
id(b) == id(a) # True
<aside> 💡 (참고) 더이상 참조되지 않는 메모리 공간은, Reference counting 또는 GC(garbage collector)가 해당 메모리를 해제시킨다.
</aside>
<aside> 💡 수정 불가능한 객체와 수정가능한 가변 객체로 나눌 수 있다.
</aside>
<aside> 💡 자주 사용되는 객체는 내부적으로 메모리 어딘가에 저장해두고, 재사용! ⇒ 메모리 절감
</aside>
# 깊은 복사 & 얕은 복사
a = [[1, 2], [3, 4], 5, 6, 7]
b = a # 얕은 복사
b = a[:] # 슬라이싱,, 값을 복사하지만,, 여전히 얕은 복사
b[0] is a[0] # True, [1, 2]
import copy
b = copy.deepcopy(a)