(제목에 물음표를 달게 된 이유가 있답니다!)
자료구조의 뒷단에서 벌어지는 일들이 궁금할때는 len 말고 객체에 할당된 메모리를 확인해볼 필요가 있습니다.
list와 set에서 remove를 수행할 때 전 당연히 "set이 훨씬 빠를거야. list는 제거 후에 바로 배열을 재설정해줘야하고, set은 hash를 쓰니까 재조정이 더 짧지 않겠어?" 라는 생각이었는데, 의외로 별 차이가 없더라구요. 그래서 각 객체에 할당되는 메모리를 트래킹해보기 위해서 찾아보니 sys에 getsizeof 라는 함수가 있었습니다.
sys.getsizeof()
import sys
A = []
print(sys.getsizeof(A))
docs
sys — System-specific parameters and functions
This module provides access to some variables used or maintained by the interpreter and to functions that interact strongly with the interpreter. It is always available. Citations C99, ISO/IEC 9899...
docs.python.org
sys 독스에 의하면 기본 내장 객체들은 모두 getsizeof 로 사용중인 메모리양을 확인할 수 있다고 합니다. 객체에 직접 할당된 메모리에 가비지컬렉터의 오버헤드가 추가로 더해져서 반환된다고 해요. (가비지 컬렉터의 오버헤드라함은.. GC가 객체를 트레킹하면서 발생하는 추가적인 메모리 사용량 정도가 되려나요?)
또 기본 객체들은 __sizeof__ 메서드를 가지고 있고, 이걸 통해서 객체에 직접 할당된 메모리 사이즈를 저장하고 있다고 합니다.
__sizeof__()
D = [1,2,3]
print(D.__sizeof__()) # 104
print(sys.getsizeof(D)) # 120
직접 찍어보니 이렇게 출력이 되네요. 구체적인 사항은 모르겠지만.. 16 byte 가 GC 오버헤드로 사용되고 있나봅니다..? 정확히 객체가 사용하는 메모리값만 보고싶다면 __sizeof__() 를 직접 호출해서 찍어보는게 좋은 것 같네요.
그리고 재밌어보이는 독스가 있길래 다음엔 이걸 한번 읽어볼까해요! 파이썬 속도 개선에 대한 여러 팁들이 담겨있는 것 같습니다!
https://wiki.python.org/moin/PythonSpeed/PerformanceTips
PythonSpeed/PerformanceTips - Python Wiki
This page is devoted to various tips and tricks that help improve the performance of your Python programs. Wherever the information comes from someone else, I've tried to identify the source. Python has changed in some significant ways since I first wrote
wiki.python.org
'Languages > Python' 카테고리의 다른 글
[pip freeze] pip freeze시에 버전 말고 @ 경로가 찍히는 이슈 (0) | 2023.07.14 |
---|---|
[set] set에서 삽입시에 벌어지는 key 테이블 리사이징 (0) | 2023.07.12 |
[conda] 가상환경 만들기, 삭제하기, list 보기, 주피터 노트북 연결 (0) | 2023.06.28 |
[fstring] fstring으로 숫자 포맷팅하기 (0) | 2023.06.28 |
[heapq] 최소힙, 최대힙 (0) | 2023.06.27 |