π§ μ§λ TIL-080κΈμμ νμ΄μ¬μ GILκ°λ μ 곡λΆνλ©° νμ΄μ¬μ κ°λΉμ§ 컬λ μ λ°©μμ λν΄ μΈκΈμ νμλ€. μ΄λ² κΈμμλ κ°λΉμ§ 컬λ μ μ λν΄ μ’ λ μμΈν μμλ³΄κ³ μ νλ€.
λ©λͺ¨λ¦¬ κ΄λ¦¬ κΈ°λ² μ€μ νλλ‘, μμ€ν μμ λμ΄μ μ¬μ©νμ§ μλ λμ ν λΉλ λ©λͺ¨λ¦¬ λΈλ‘μ μ°Ύμ μλμΌλ‘ μ¬μ© κ°λ₯ν μμμΌλ‘ νμνλ κ²μ λ»νλ€.
λ μ΄μ νμμμ΄μ§ λ©λͺ¨λ¦¬λ₯Ό μ°λ κΈ°(Garbage), μμ€ν μμ κ°λΉμ§ 컬λ μ μ μννλ λΆλΆμ κ°λΉμ§ 컬λ ν°(Garbage Collector)λΌ λΆλ₯Έλ€.
κ°λΉμ§ 컬λ μ μμ μ νλ κ°λΉμ§ 컬λ ν°λ μλμ κ°μ μΌμ νλ€.
νλ‘κ·Έλ¨μ μ€νν λ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νλ OSμ νλ‘κ·Έλ¨ μ€νμ νμν λ©λͺ¨λ¦¬λ₯Ό μμ²νκ² λλλ°, μ΄λ ν λΉνκ² λλ λ©λͺ¨λ¦¬ μ μ₯ μ£Όμλ₯Ό offset μ£ΌμλΌκ³ νλ€.
ν λΉλ λ©λͺ¨λ¦¬λ€μ νλ‘κ·Έλ¨μ΄ μλνλ©΄ νμ°μ μΌλ‘ κ°λΉμ§κ° λ°μνκ²λλ€.
κΈ°μ‘΄μ κ°λ¦¬ν€κ³ μλ λ©λͺ¨λ¦¬κ° μλ‘κ² μ μΈ νΉμ νλ³νμ΄ λλ©΄, λ€λ₯Έ κ³³μ κ°λ¦¬ν€κ² λλ©΄μ μ£Όμλ₯Ό μμ΄λ²λ¦¬κ² λκ³ λ€μ μ°Ύμ μ μκ² λλ©΄μ μ 리λμ§ μμ λ©λͺ¨λ¦¬κ° μ겨λ²λ¦¬κΈ° λλ¬Έμ΄λ€.
μ΄λ κ°λΉμ§ 컬λ ν°λ κ°λΉμ§λ₯Ό λ€λ₯Έ μ©λλ‘ μ¬μ©ν μ μλλ‘ λ©λͺ¨λ¦¬ ν΄μ λ₯Ό μν¨λ€.
CPythonμμ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νλ λ°©λ²μλ ν¬κ² 2κ°μ§κ° μλ€.
1) Generational Garbage Collection(μΈλλ³ κ°λΉμ§ 컬λ μ
)
2) Reference Counting (λ νΌλ°μ€ μΉ΄μ΄ν
)
π μ΄μ€μμ λ νΌλ°μ€ μΉ΄μ΄ν
λ°©λ²μ μ£Όλ‘ μ¬μ©νλ€. (μ§λ TIL-080 κΈμλ μ€λͺ
μ΄ λμ΄ μλ€.)
λ νΌλ°μ€ μΉ΄μ΄ν μ, κ°μ²΄λ₯Ό λ§λ€λλ§λ€ μΌλ§λ κ·Έ κ°μ²΄κ° μ¬μ©λκ³ μλμ§ μΉ΄μ΄ν νκ³ κ°μ²΄κ° μ°Έμ‘°λ λλ§λ€ μ¦κ°λκ³ μ°Έμ‘°κ° ν΄μ λλ©΄ κ°μνλ€. κ·Έλ¦¬κ³ 0μ΄λλ©΄ λ©λͺ¨λ¦¬ ν λΉμ λ¦΄λ¦¬μ¦ νλ λ°©λ²μ΄λ€.
sys
λΌμ΄λΈλ¬λ¦¬μ getrefcount
ν¨μλ‘ κ°μ²΄μ μ°Έμ‘° νμλ₯Ό μ μ μλ€.
import sys
text = 'λ°±μλ κ°λ°μ CK!'
print(sys.getrefcount(text))
lst = [text]
print(sys.getrefcount(text))
tup = (text)
print(sys.getrefcount(text))
dic = {'text': text}
print(sys.getrefcount(text))
a = text
print(sys.getrefcount(text))
>>> 2
>>> 3
>>> 4
>>> 5
>>> 6
β λ³μλ‘ μ§μ λλ μκ°λΆν°κ° μ°Έμ‘° νμ 1νμ΄λ€.
β 첫 print μλνλ©° 1ν μΆκ°
β 리μ€νΈμ μΈμ©λλ©° 1ν μΆκ°
β λλ²μ§Έ print λΆν°λ νμ μΆκ° μλ¨
β tupleμ μΈμ©λλ©° 1ν μΆκ°
β λμ
λ리μ μΈμ©λλ©° 1ν μΆκ°
β λ€λ₯Έ λ³μμ ν λΉλλ©° 1ν μΆκ°
πββοΈ κ°μ κΈ°λ₯μ νλ‘κ·Έλ¨μ΄λλΌλ λ©λͺ¨λ¦¬ κ΄λ¦¬μ λ°λΌ μ±λ₯μ΄ κ·Ήλͺ νκ² λ€λ₯Ό μ μλ€. νμ λ λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μλ μ½λλ₯Ό μμ±νλ κ²μ κ°λ°μμ λͺ«μ΄κΈ° λλ¬Έμ κ°λΉμ§ 컬λ μ κ³Ό κ°μ κ°λ μ λμμ리, λ΄λΆ ꡬ쑰λ₯Ό μ’ λ νμ€ν 곡λΆν νμκ° μλ κ² κ°λ€.