Python은 Dict를 재활용한다
찾아보거나 알게된 배경
dict는 언제 리사이즈될까 를 찾아보다가 함꼐 알게된 부분
요약
- python 에서 dict(
PyDictObject)가 삭제된다면, 해당 dict는 파이썬 내부의 free_list로 이동한다 - free_list에는 최대 80(
PyDict_MAXFREELIST)개까지 저장이 가능하며, 그 개수를 넘어가면 메모리를 해제한다 - PyDictObject 내부의 PyDictKeysObject는 삭제된다면, 해당 데이터의 크기가 기본 사이즈일 경우, 파이썬 내부의 keys_free_list로 동한다
- 해당 리스트 또한 최대 80(
PyDict_MAXFREELIST)개까지 저장 가능하며, 그 개수를 넘어가면 메모리를 해제한다. - free_list / keys_free_list의 경우 old gc가 돌 때 메모리에서 해제된다.
>>> d = {}
>>> id(d)
4315419008
>>> del d
>>> d2 = {}
>>> id(d2)
4315419008
>>> d3 = {}
>>> del d2
>>> del d3
>>> d4 = {}
>>> id(d4)
4315419136
>>> d5 = {}
>>> id(d5)
4315419008