파이썬은 전체적으로 어떻게 관리합니까?
파이썬이 내부적으로 int와 long type을 어떻게 관리하는지 아는 사람?
- 동적으로 올바른 유형을 선택합니까?
- 인트의 한도는 얼마입니까?
- 파이썬 2.6을 사용하고 있는데 이전 버전과 다른가요?
아래 코드를 어떻게 이해해야 합니까?
>>> print type(65535)
<type 'int'>
>>> print type(65536*65536)
<type 'long'>
업데이트:
>>> print type(0x7fffffff)
<type 'int'>
>>> print type(0x80000000)
<type 'long'>
int
그리고.long
몇 가지 버전을 "수정"했습니다.그 이전에는 연산 연산을 통해 int를 오버플로하는 것이 가능했습니다.
3.x는 긴 시간을 모두 제거하고 int만 사용함으로써 이를 더욱 발전시켰습니다.
- Python 2:에는 Python int가 보유할 수 있는 최대 값이 포함되어 있습니다.
- 64비트 Python 2.7에서 크기는 24바이트입니다.체크인으로 합니다.
sys.getsizeof()
.
- 64비트 Python 2.7에서 크기는 24바이트입니다.체크인으로 합니다.
- Python 3:에는 Python int가 될 수 있는 최대 크기(바이트)가 포함되어 있습니다.
- 32비트는 기가바이트이고 64비트는 엑사바이트입니다.
- 이러한 큰 int는 8과 비슷한 값을 가질 것입니다.
sys.maxsize
.
이 PEP가 도움이 될 겁니다.
결론은 파이썬 버전 > 2.4에서 그것에 대해 정말로 걱정할 필요가 없다는 것입니다.
Python 2는 값의 크기를 기준으로 유형을 자동으로 설정합니다.최대값 가이드는 아래에서 확인할 수 있습니다.
Python 2의 기본 Int의 최대값은 65535이며, 그 이상의 값은 길 것입니다.
예:
>> print type(65535)
<type 'int'>
>>> print type(65536*65536)
<type 'long'>
Python 3에서는 긴 데이터 형식이 제거되었으며 Int 클래스에서 모든 정수 값을 처리합니다.Int의 기본 크기는 CPU 아키텍처에 따라 달라집니다.
예:
- 32비트 시스템 정수의 기본 데이터 유형은 'Int32'입니다.
- 64비트 시스템 정수의 기본 데이터 유형은 'Int64'입니다.
각 유형의 최소값/최대값은 다음과 같습니다.
- Int8: [-128,127]
- Int16: [-32768,32767]
- Int32: [-2147483648,2147483647]
- Int64: [-9223372036854775808,922372036854775807]
- Int128: [-170141183460469231731687303715884105728,170141183460469231731687303715884105727]
- UInt8: [0,255]
- UInt16: [0,65535]
- UInt32: [0,4294967295]
- UInt64: [0,18446744073709551615]
- UInt128 : [0,340282366920938463463374607431768211455]
Int의 크기가 위에 언급된 제한을 초과하면 python은 자동으로 유형을 변경하고 최소값/max 값 증가를 처리하기 위해 더 많은 메모리를 할당합니다.파이썬 2에서는 '긴'으로 변환되지만 이제는 다음 크기의 Int로 변환됩니다.
예:32비트 운영 체제를 사용하는 경우 Int의 최대값은 기본적으로 2147483647입니다.2147483648 이상의 값이 할당되면 유형이 Int64로 변경됩니다.
int의 크기와 메모리 할당을 확인하는 방법은 다양합니다.참고: Python 3에서는 내장형() 메서드를 사용하면 항상 반환됩니다.<class 'int'>
어떤 크기의 Int를 사용하든 상관없이 사용할 수 있습니다.
내 컴퓨터에서:
>>> print type(1<<30)
<type 'int'>
>>> print type(1<<31)
<type 'long'>
>>> print type(0x7FFFFFFF)
<type 'int'>
>>> print type(0x7FFFFFFF+1)
<type 'long'>
Python은 32비트에 맞는 값에 대해 ints(32비트 부호 정수, 후드 아래의 Cints인지는 모르겠지만)를 사용하지만, 더 큰 값에 대해서는 자동으로 long(임의적으로 많은 비트 수 - 즉, bignum)으로 전환됩니다.이를 통해 작은 값에 대한 작업 속도를 높이는 동시에 빅넘으로의 원활한 전환으로 오버플로를 방지할 수 있을 것입니다.
재밌는.64비트(i7 Ubuntu) 상자에서:
>>> print type(0x7FFFFFFF)
<type 'int'>
>>> print type(0x7FFFFFFF+1)
<type 'int'>
더 큰 기계에서 64비트 인트까지 단계적으로 진행되는 것으로 추측합니다.
Python 2.7.9 자동으로 숫자를 승격합니다.int() 또는 long()을 사용할 수 없는 경우.
>>> a = int("123")
>>> type(a)
<type 'int'>
>>> a = int("111111111111111111111111111111111111111111111111111")
>>> type(a)
<type 'long'>
python 3.x부터 통합 정수 라이브러리는 이전 버전보다 훨씬 더 스마트합니다.내 (i7 Ubuntu) 박스에서 나는 다음을 받았습니다.
>>> type(math.factorial(30))
<class 'int'>
구현에 대한 자세한 내용은 다음을 참조하십시오.Include/longintrepr.h, Objects/longobject.c and Modules/mathmodule.c
파일. 마지막 파일은 동적 모듈(so 파일로 컴파일됨)입니다.그 코드는 따르기에 좋은 주석이 달려 있습니다.
그들을 관리하는 이유는int
그리고.long
형제 클래스 정의입니다.+, -, *, / 등에 대한 적절한 방법을 사용하여 적절한 클래스의 결과를 얻을 수 있습니다.
예를들면
>>> a=1<<30
>>> type(a)
<type 'int'>
>>> b=a*2
>>> type(b)
<type 'long'>
이 경우, 클래스는int
을 가지고 있습니다.__mul__
를 생성하는 방법(*을 구현하는 방법)long
필요한 경우 결과를 표시합니다.
여기에 주어진 모든 대답, 특히 @James Lane에 계속해서.
정수형의 크기는 다음 공식으로 표현할 수 있습니다.
총 범위 = (2 ^ 비트 시스템)
하한 = -(2^비트 시스템)*0.5 상한 = ((2^비트 시스템)*0.5) - 1
언급URL : https://stackoverflow.com/questions/2104884/how-does-python-manage-int-and-long
'programing' 카테고리의 다른 글
MariaDB: JSON_TABLE 없이 JSON 어레이에 액세스 (0) | 2023.06.22 |
---|---|
현재 월 및 연도를 가져오는 방법 (0) | 2023.06.22 |
Oracle에서 잠긴 행을 찾는 방법 (0) | 2023.06.22 |
MongoDb: .gz 파일에서 덤프 데이터를 가져오는 방법은 무엇입니까? (0) | 2023.06.22 |
TS2339: '포함' 속성이 '문자열' 유형에 없습니다. (0) | 2023.06.22 |