[PYTHON] 파이썬은 int와 long을 어떻게 관리합니까?
PYTHON파이썬은 int와 long을 어떻게 관리합니까?
Python이 내부적으로 int 타입과 long 타입을 관리하는 방법을 아는 사람이 있습니까?
아래 코드를 어떻게 이해해야합니까?
>>> print type(65535)
<type 'int'>
>>> print type(65536*65536)
<type 'long'>
최신 정보:
>>> print type(0x7fffffff)
<type 'int'>
>>> print type(0x80000000)
<type 'long'>
해결법
-
==============================
1.int와 long은 몇 가지 버전으로 "통일"되었습니다. 그 전에는 수학 연산을 통해 int를 오버플로 할 수있었습니다.
int와 long은 몇 가지 버전으로 "통일"되었습니다. 그 전에는 수학 연산을 통해 int를 오버플로 할 수있었습니다.
3.x는 int를 모두 없애고 오랜 기간 만 사용함으로써 더욱 발전되었습니다.
Python 2 : sys.maxint는 Python int가 가질 수있는 최대 값을 포함합니다.
Python 3 : sys.maxsize는 Python int가 가질 수있는 최대 값을 포함합니다.
-
==============================
2.이 PEP가 도움이됩니다.
이 PEP가 도움이됩니다.
결론은 파이썬 버전> 2.4에서 정말로 걱정할 필요가 없다는 것이다.
-
==============================
3.흥미 롭 군. 내 64 비트 (i7 우분투) 상자에서 :
흥미 롭 군. 내 64 비트 (i7 우분투) 상자에서 :
>>> print type(0x7FFFFFFF) <type 'int'> >>> print type(0x7FFFFFFF+1) <type 'int'>
큰 머신에서 64 비트 정수까지 단계별로 맞춰보세요.
-
==============================
4.내 컴퓨터에서 :
내 컴퓨터에서 :
>>> print type(1<<30) <type 'int'> >>> print type(1<<31) <type 'long'> >>> print type(0x7FFFFFFF) <type 'int'> >>> print type(0x7FFFFFFF+1) <type 'long'>
파이썬은 int (32 비트 부호있는 정수, 32 비트에 맞는 값에 대해서는 C 코드가 아닌지는 모르지만)를 사용하지만 자동으로 long (임의로 많은 수의 비트 - 즉 bignum)으로 전환합니다. 더 커. 나는 bignums 로의 완벽한 전환으로 오버플로를 피하면서 작은 값에 대해서는이 작업 속도를 높이는 것으로 추측합니다.
-
==============================
5.Python 2.7.9는 자동으로 숫자를 승격시킵니다. int () 또는 long ()을 사용하는 것이 확실하지 않은 경우.
Python 2.7.9는 자동으로 숫자를 승격시킵니다. int () 또는 long ()을 사용하는 것이 확실하지 않은 경우.
>>> a = int("123") >>> type(a) <type 'int'> >>> a = int("111111111111111111111111111111111111111111111111111") >>> type(a) <type 'long'>
-
==============================
6.파이썬 3.x에서 통합 정수 리브라이는 이전 버전보다 더 똑똑합니다. 내 (i7 우분투) 상자에 다음과 같은 정보가 있습니다.
파이썬 3.x에서 통합 정수 리브라이는 이전 버전보다 더 똑똑합니다. 내 (i7 우분투) 상자에 다음과 같은 정보가 있습니다.
>>> type(math.factorial(30)) <class 'int'>
구현 세부 사항은 Include / longintrepr.h, Objects / longobject.c 및 Modules / mathmodule.c 파일을 참조하십시오. 마지막 파일은 동적 모듈 (so 파일로 컴파일 됨)입니다. 이 코드는 잘 설명되어 있습니다.
-
==============================
7.그것은 int와 long이 형제 클래스 정의이기 때문에 그것들을 관리합니다. 그들은 적절한 클래스의 결과를 생성 할 +, -, *, / 등의 적절한 메소드를 가지고 있습니다.
그것은 int와 long이 형제 클래스 정의이기 때문에 그것들을 관리합니다. 그들은 적절한 클래스의 결과를 생성 할 +, -, *, / 등의 적절한 메소드를 가지고 있습니다.
예를 들어
>>> a=1<<30 >>> type(a) <type 'int'> >>> b=a*2 >>> type(b) <type 'long'>
이 경우 int 클래스에는 필요한 경우 long 결과를 만드는 __mul__ 메서드 (*를 구현하는 메서드)가 있습니다.
-
==============================
8.Python 2는 값의 크기에 따라 유형을 자동으로 설정합니다. 최대 값에 대한 안내는 아래에서 찾을 수 있습니다.
Python 2는 값의 크기에 따라 유형을 자동으로 설정합니다. 최대 값에 대한 안내는 아래에서 찾을 수 있습니다.
파이썬 2의 기본 Int 값의 최대 값은 65535이고 그 이상은 long
예 :
>> print type(65535) <type 'int'> >>> print type(65536*65536) <type 'long'>
파이썬 3에서는 긴 데이터 유형이 제거되었으며 모든 정수 값은 Int 클래스에 의해 처리됩니다. Int의 기본 크기는 CPU 아키텍처에 따라 다릅니다.
예 :
각 유형의 최소 / 최대 값은 아래에서 확인할 수 있습니다.
Int의 크기가 위에서 언급 한 제한을 초과하면 python은 자동으로 해당 유형을 변경하고 최소 / 최대 값의 증가를 처리하기 위해 더 많은 메모리를 할당합니다. 파이썬 2에서는 'long'으로 변환 될 것이고, 이제는 Int의 다음 크기로 변환됩니다.
예 : 32 비트 운영 체제를 사용하는 경우 Int의 최대 값은 기본적으로 2147483647이됩니다. 2147483648 이상의 값이 지정되면 유형이 Int64로 변경됩니다.
int의 크기와 메모리 할당을 검사하는 방법은 여러 가지가 있습니다. 참고 : 파이썬 3에서, 내장 된 type () 메소드를 사용하면 사용중인 Int의 크기에 관계없이 항상
를 반환합니다.
from https://stackoverflow.com/questions/2104884/how-does-python-manage-int-and-long by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 클래스를 복사하는 방법? (0) | 2018.10.04 |
---|---|
[PYTHON] 리눅스를 통한 파이썬 프로세스 목록 (0) | 2018.10.04 |
[PYTHON] pickle.dump 사용 - TypeError : 바이트가 아닌 str이어야합니다. (0) | 2018.10.04 |
[PYTHON] 파이썬에서 '>> 0이 참인 이유는 무엇입니까? (0) | 2018.10.04 |
[PYTHON] 파이썬 문자열 리터럴에서 백 슬래시 인용 (0) | 2018.10.04 |