2017-10-28 21 views
0

int으로 표현할 수있는 최대 값을 상수로 기록하고 싶지 않습니다. int이 차지할 수있는 최대 메모리 양을 찾으려고합니다. 다음 코드를 생각해 내 특정 시스템의 경우파이썬 int가 차지하는 바이트 수는 어떻게 얻습니까?

import sys 

def print_and_execute(*args): 
    for s in args: 
     print(s, end = " == ") 
     r = eval(s) 
     print(r) 
    return 

print_and_execute("type(5) ")  
print_and_execute("sys.getsizeof(5)")  
i = int()  
print_and_execute("i")  
print_and_execute("sys.getsizeof(i)")  
i = 2937  
print_and_execute("i")  
print_and_execute("sys.getsizeof(i)") 
print_and_execute("sys.maxsize") 
print_and_execute("sys.getsizeof(sys.maxsize)") 

을, 출력은 다음과 같습니다

type(5) == <class 'int'> 
sys.getsizeof(5) == 28 
i == 0 
sys.getsizeof(i) == 24 
i == 2937 
sys.getsizeof(i) == 28 
sys.maxsize == 9223372036854775807 
sys.getsizeof(sys.maxsize) == 36 

는 분명히, 일부 int의 24 바이트이고, 다른 사람은 여전히 ​​다른 사람 (36) 얼마나 많은 바이트를 사용, 28입니다 어떤 크기의 int을 보유해야합니까?

+0

파이썬 정수는 필요한만큼 크게 확장 될 수 있습니다. 즉, 상한값은 사용 가능한 메모리의 양에 의해 결정됩니다. –

+0

"일부 정수는 24 바이트입니다."- 0 이외의 값은 어느 것입니까? –

답변

2

크기를 유지하는 데 필요한 바이트 수는 int입니까?

많은 수만큼 필요합니다. int의 크기에는 제한이 없으며 임의 크기 인 their documentation 상태입니다. *

sys.maxsizeint 개체의 최대 크기를 나타내지 않습니다. 인덱스 값을 보유하기 위해 (CPython에서) 사용되는 Py_ssize_t의 최대 값입니다.

>>> sys.getsizeof(sys.maxsize * sys.maxsize) 
44 

그래서, 당신이 그것에 getsizeof를 사용하여 주어진 int에 대한 바이트 수를 얻을 :

예를 들어, 단지 큰 intmaxsize보다 만듭니다.

* 바운드, 결국, 사용 가능한 메모리에 의해.