programing

파이썬은 전체적으로 어떻게 관리합니까?

powerit 2023. 6. 22. 22:31
반응형

파이썬은 전체적으로 어떻게 관리합니까?

파이썬이 내부적으로 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().
  • 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

반응형