s = 'Garbage Collection'
print(s)
'변수에 s 문자열을 저장했다', '변수에 문자열 object를 저장했다'라고 표현(X)
"변수 s가 문자열 'Garbage Collection'을 reference한다" (O)
r = [1, 2, 3]
r이라는 변수 이름으로 [1, 2, 3] list object를 reference하고 있다.
list object [1, 2, 3]은 언제 소멸 대상이 될까?
➡️ "object를 아무도 reference하지 않는 상황"
즉, 다음 상황에서는 list가 소멸 대상이 된다.
r = [1, 2, 3]
r = 'simple'
변수 r이 reference 대상을 'simple'로 바꿨고, list [1, 2, 3]은 아무도 참조하지 않기 때문에 소멸 대상이 된다.
단, 소멸 대상이 되었다고 해서 바로 소멸되는 것은 아니다.
일단 소멸 대상으로 등록만 해두고, system의 시간적 여유가 생길때 소멸시키게 된다.
r1 = [1, 2, 3] # list [1, 2, 3]의 reference count = 1
r2 = r1 # list [1, 2, 3]의 reference count = 2
r1 = 'simple' # list [1, 2, 3]의 reference count = 1
r2 = 'happy' # list [1, 2, 3]의 reference count = 0 -> Garbage Collection 대상
programming 언어는 Interpreter 언어와 Compiling 언어로 나눌 수 있다.
(참고자료1, 참고자료2)
Interpreter
:Compiler
(참고 자료)
Interpreter는 한국어로 "통역사"이기 때문에
하는 역할은 python 소스 코드를 OS가 알아들을 수 있는 언어로 한 줄씩 "통역"해주는 역할이다.
(참고 자료)
(참고자료)
따라서 "python"이라고 하는 것을 정리하자면
python 문법에 맞게 작성해야 하는 source code가 있다.
python source code를 python interpreter가 한 줄씩 compile하여 OS에게 통역을 해준다.
구체적으로,
interpreter에서는 해당 source code 한 줄을 compile하여 Byte Code로 만든다. (Byte Code는 VM만 있다면 어떠한 Platform에서도 실행될 수 있다는 장점이 있음 = 코드 재사용성)
Byte Code는 PVM(Python Virtual Machine)에서 실행이 된다.
python interpreter는 PVM의 구현 방식에 따라 종류가 다양하다.
(PVM이 C언어로 구현되어 있는 가장 일반적이고 널리 사용되는 interpreter를 CPython,
Java로 구현되어 있어서 Java에 대한 접근성이 좋은 interpreter를 Jython,
Microsoft사의 .Net 기반으로 만들어지고 또 그 위에서 동작하는 interpreter를 IronPython.)