디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[📚정보] 오브젝트의 메모리 크기 구하는 방법

Coma갤로그로 이동합니다. 2023.02.19 05:24:14
조회 256 추천 4 댓글 2
														
import sys

sys.getsizeof(obj)


sys 모듈의 getsizeof 함수로 오브젝트의 크기를 구할 수 있다.

int 타입의 값을 반환하고 메모리 상에서 차지하는 바이트 수를 의미한다.


크기는 하드웨어와 버전, 구현체에 따라 다를 수 있다.





64비트 윈도의 파이썬3 기준으로 어떤 결과가 나오는 지 주석으로 적었다.


print(sys.getsizeof(None))      # 16
print(sys.getsizeof(object()))  # 16


파이썬의 내장 객체는 기본적으로

가비지 컬렉션을 위한 ssize_t (64비트이므로 8바이트) 레퍼런스 카운트와,

타입 정보에 대한 포인터 (64비트이므로 8바이트)로 구성되어 있다.




print(sys.getsizeof(0))         # 24
print(sys.getsizeof(1))         # 28
print(sys.getsizeof(2 ** 30))   # 32
print(sys.getsizeof(2 ** 60))   # 36
print(sys.getsizeof(-1))        # 28


파이썬에서 정수는 임의 정밀도(Arbitrary-precision, Bignum) 방식이기 때문에

숫자가 증가할 수록 크기가 늘어난다.

https://rushter.com/blog/python-integer-implementation/


레이아웃을 알아보니 정수는

레퍼런스 카운트와 타입 정보에 대한 포인터,

int가 임의 정밀도이기 위해 필요한 ssize_t 크기 정보,

각 수를 나타내는 digit 데이터 (uint32_t[]) 로 구성되어있다.


print(sys.int_info)
# sys.int_info(bits_per_digit=30, sizeof_digit=4, default_max_str_digits=4300, str_digits_check_threshold=64


2의 30승마다 증가하고 digit 크기는 4바이트임을 알 수 있다.

0은 크기가 없는 상태다. 그러므로 24바이트.




print(sys.getsizeof(False))     # 24
print(sys.getsizeof(True))      # 28


True가 False보다 4바이트 많다.

파이썬에서 bool은 int의 서브클래스로 구현됐기 때문이다.

https://docs.python.org/3/c-api/bool.html




print(sys.getsizeof(0.0))    # 24
print(sys.getsizeof(1.0))    # 24


float는 IEEE 754를 그대로 사용한다.

기본적인 오브젝트 구조에 double의 8바이트가 더해져 24바이트로 나왔다.

https://github.com/python/cpython/blob/main/Include/cpython/floatobject.h




print(sys.getsizeof(''))        # 49
print(sys.getsizeof('a'))       # 50
print(sys.getsizeof('aa'))      # 51
print(sys.getsizeof('あ'))      # 76
print(sys.getsizeof('あa'))     # 78


str의 경우,

a가 하나씩 늘어날 때마다 1바이트 늘어나는 건 직관적이지만,

어째서 아스키 문자가 아닌 あ가 있을 때는 왜 74바이트로 시작하는 것이고,

같은 a가 추가될 때 2바이트씩 늘어나는 지...


이런 현상은 파이썬의 문자열 처리 방식 때문이다.

https://rushter.com/blog/python-strings-and-memory/


あ는 Latin-1 밖에 있으므로

문자열은 UCS-2 문자열이 되어

한 문자에 2바이트씩 차지하게 된 것이다.

한글도 BMP(Basic Multilingual Plane) 상에 있으므로,

한글이 들어간 문자열도 2바이트씩을 차지하게 된다.


그 외에 왜 빈 문자열이 49바이트인지,

UCS-2 문자열이 74바이트가 기본인지는...

부가 정보가 많아서 그렇다.




그 외 컬렉션이든 변수든 참조를 기반으로 하는 경우가 많아서 더 건질 정보는 딱히 없는 것 같다.

시·공간적 효율 측면에서 표준 라이브러리나 NumPy의 array를 사용하는 경우도 있으니 참고.


이렇게 주구장창 적어놓긴 했지만 이걸 알아서 딱히 효율적이게 되진 않을 거라 본다.

애초에 파이썬을 쓸 때 메모리가 걱정이면 파이썬을 안 쓰면 되니까.

추천 비추천

4

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
- 설문 영포티룩도 멋지게 소화할 것 같은 40대 스타는? 운영자 25/10/27 - -
- AD 할로윈 슈퍼위크~!! 운영자 25/10/23 - -
2174 🔎질문 파이썬 버전에 따른 차이 질문 [5] ㅇㅇ(220.86) 23.03.26 587 0
2173 일반 신촌우왕 계산기: 수열 기능 탑재 신촌우왕박찬우갤로그로 이동합니다. 23.03.26 158 1
2172 🔎질문 pc용 소프트웨어 ui 툴 뭐 쓰시나요 ㅇㅇ(39.7) 23.03.24 155 0
2171 🔎질문 컴맹 좀 도와주세요....이거 어떻게 실행파일로 만들죠? [6] ㅇㅇ(59.13) 23.03.23 288 1
2170 일반 회사에서 필요하면 소프트웨어 라이센스 신청하면 된다는데 [4] ㅇㅇ(211.234) 23.03.22 237 1
2169 🔎질문 gui 라이브러리를 응용하는 과정에서 문제가 생겨 질문드립니다. [3] ㅇㅇ(125.184) 23.03.22 209 0
2168 🔎질문 NoSuchElementException 오류 크롤링 제발(120.142) 23.03.22 108 0
2165 🔎질문 파이썬 최고 gui 라이브러리가 뭘까요 [4] ㅇㅇㅇㅇ(120.142) 23.03.21 297 0
2162 🔎질문 deque[0] 하고 deque[-1] 하면 O(1) 시간복잡도임? [4] ㅇㅇ(175.193) 23.03.18 207 0
2160 🔎질문 파이참 가상화 동기화가 안돼.. [2] ㅇㅇ(222.114) 23.03.16 281 0
2159 🔎질문 에러가 첫줄부터 뜨는데 이걸 어떻게 고치나요? [4] ㅁㅁ갤로그로 이동합니다. 23.03.16 199 0
2157 🔎질문 뉴비vscode 에디터 질문이요 [2] ㅇㅇ(116.36) 23.03.15 183 0
2156 🔎질문 datetime.now()에서 어제 날짜 나오는데 어떻게 해결해요? [5] ㅁㅁ갤로그로 이동합니다. 23.03.15 249 0
2155 💡답변 cosine approximate 답변 ㅇㅇ(112.221) 23.03.14 97 0
2154 📚정보 [공개] 신촌우왕 WEB 계산기 - Python + Javascript [5] 신촌우왕박찬우갤로그로 이동합니다. 23.03.14 190 2
2153 🔎질문 쌩초보 파이썬 유튜브로 독학 가능할까요 형님들 [1] 00(182.161) 23.03.13 645 0
2152 🔎질문 딥러닝 알고리즘 질문... [8] ㅇㅇ(222.114) 23.03.13 212 0
2151 일반 파이썬 PyQT6 왜이렇게 error가 많냐? ㅜㅜ 343434(211.44) 23.03.13 125 0
2150 🔎질문 logging 질문 [3] ㅇㅇ(220.86) 23.03.13 220 0
2149 🔎질문 너무 조빱이라 죄송한데 질문좀요 ㅠㅠ [4] 눈팅이갤로그로 이동합니다. 23.03.13 191 0
2148 🔎질문 파이썬에 이런 기능 있나요? [2] ㅇㅇ(163.152) 23.03.12 206 0
2147 🔎질문 비쥬얼 스튜디오 파이썬 버전 문제? [1] ㅇㅇ(118.219) 23.03.08 519 0
2144 🔎질문 QIcon 이거 좀 도와주세요.. 아이콘이 안보입니다. [9] ㅇㅇ(49.177) 23.02.28 263 0
2143 🔎질문 개발 편의를 위해서 여러 모듈로 나누면은 성능이 안좋아지나요? [2] ㅇㅇ(222.108) 23.02.28 245 0
2140 🔎질문 파이썬 라이브러리 설치가 안되는데 어떻게해 ㅠㅠ [2] 통붕이(39.118) 23.02.27 224 0
2139 🔎질문 변수 할당을 하고 안하고의 차이 질문 [5] ㅇㅇ(220.86) 23.02.26 243 0
2138 🔎질문 파이썬 문자열 질문 [3] hppthppt(58.102) 23.02.24 212 0
2137 🔎질문 Userform - 파이썬 Form 만드는 것 왜 이리 힘드냐? [2] 46e(211.44) 23.02.22 205 0
2135 🔎질문 이거 구현가능? [2] 기계충(119.202) 23.02.20 223 0
📚정보 오브젝트의 메모리 크기 구하는 방법 [2] Coma갤로그로 이동합니다. 23.02.19 256 4
2133 🔎질문 CP949 왜나오는지 모르겠어요 알려주세요 [7] oo(116.34) 23.02.19 231 0
2132 🔎질문 구글 코랩에서 파이게임 가능한가요?? ㅠㅠㅜ [1] ㅇㅇ(121.136) 23.02.17 278 0
2131 🔎질문 클래스 만들 때 메서드의 결과를 인스턴스 내부에 저장하게 할 수는 없어? [10] ㅇㅇ(182.209) 23.02.17 201 0
2130 일반 몇 개월 전에 짬내서 정규식 좀 공부했었는데 [5] ㅁㅁ(211.234) 23.02.17 186 0
2128 🔎질문 파이썬 초짜인데 뭐가 틀렸는지 모르겠으어 [4] oo(116.34) 23.02.16 233 0
2127 🔎질문 flask route에 쓰는 url 관련한 질문 [1] ㅇㅇ(1.213) 23.02.16 200 0
2126 🔎질문 anaconda prompt관련 SyntaxError질문 [8] ㅇㅇ(58.77) 23.02.15 201 0
2120 🔎질문 string indices must be integers 질문 [8] ㅇㅇ(58.77) 23.02.12 236 0
2117 🔎질문 typeerror질문 [1] ㅇㅇ(58.77) 23.02.10 251 0
2115 🔎질문 pyqt5 ui 적용 관련 문제가 있어요. [2] ㅇㅇ(221.139) 23.02.09 292 0
2114 🔎질문 형들 배열에서 행 어캐 선택해? [1] ㅇㅇ(114.71) 23.02.09 174 0
2112 🔎질문 vscode 설정 질문입니다.. [1] 00(121.134) 23.02.07 201 0
2111 🔎질문 질문입니다 ! [2] ㅇㅇ(1.254) 23.02.05 195 0
2110 🔎질문 vscode 이거 어떡하냐.. [2] ㅇㅇ(61.255) 23.02.05 228 0
2109 🔎질문 형들 전역변수 관해서 간단한 질문좀 [7] ㅇㅇ(114.71) 23.01.30 276 0
2108 🔎질문 requests+btfulsoup로 긁었더니 td데이터가 없는데? [4] ㅇㅇ(121.177) 23.01.28 261 0
2105 🔎질문 파린이 도통 이해안가는데 설명 좀 해주세오... [4] ㅇㅇ(221.150) 23.01.25 275 0
2104 🔎질문 GUI 먼저 코딩하는거 어떻게들 생각하시나요 [2] ㅇㅇ(125.128) 23.01.24 322 0
2101 🔎질문 형님들 이거 뭘로 그린 건지 아시는분 있으신가요? [1] ㅇㅇ(220.116) 23.01.20 263 0
2100 🔎질문 파이썬 기초적인 질문.. [8] dpfkdl(59.13) 23.01.19 406 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2