복붙노트

[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. ==============================

    1.int와 long은 몇 가지 버전으로 "통일"되었습니다. 그 전에는 수학 연산을 통해 int를 오버플로 할 수있었습니다.

    int와 long은 몇 가지 버전으로 "통일"되었습니다. 그 전에는 수학 연산을 통해 int를 오버플로 할 수있었습니다.

    3.x는 int를 모두 없애고 오랜 기간 만 사용함으로써 더욱 발전되었습니다.

    Python 2 : sys.maxint는 Python int가 가질 수있는 최대 값을 포함합니다.

    Python 3 : sys.maxsize는 Python int가 가질 수있는 최대 값을 포함합니다.

  2. ==============================

    2.이 PEP가 도움이됩니다.

    이 PEP가 도움이됩니다.

    결론은 파이썬 버전> 2.4에서 정말로 걱정할 필요가 없다는 것이다.

  3. ==============================

    3.흥미 롭 군. 내 64 비트 (i7 우분투) 상자에서 :

    흥미 롭 군. 내 64 비트 (i7 우분투) 상자에서 :

    >>> print type(0x7FFFFFFF)
    <type 'int'>
    >>> print type(0x7FFFFFFF+1)
    <type 'int'>
    

    큰 머신에서 64 비트 정수까지 단계별로 맞춰보세요.

  4. ==============================

    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. ==============================

    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. ==============================

    6.파이썬 3.x에서 통합 정수 리브라이는 이전 버전보다 더 똑똑합니다. 내 (i7 우분투) 상자에 다음과 같은 정보가 있습니다.

    파이썬 3.x에서 통합 정수 리브라이는 이전 버전보다 더 똑똑합니다. 내 (i7 우분투) 상자에 다음과 같은 정보가 있습니다.

    >>> type(math.factorial(30))
    <class 'int'>
    

    구현 세부 사항은 Include / longintrepr.h, Objects / longobject.c 및 Modules / mathmodule.c 파일을 참조하십시오. 마지막 파일은 동적 모듈 (so 파일로 컴파일 됨)입니다. 이 코드는 잘 설명되어 있습니다.

  7. ==============================

    7.그것은 int와 long이 형제 클래스 정의이기 때문에 그것들을 관리합니다. 그들은 적절한 클래스의 결과를 생성 할 +, -, *, / 등의 적절한 메소드를 가지고 있습니다.

    그것은 int와 long이 형제 클래스 정의이기 때문에 그것들을 관리합니다. 그들은 적절한 클래스의 결과를 생성 할 +, -, *, / 등의 적절한 메소드를 가지고 있습니다.

    예를 들어

    >>> a=1<<30
    >>> type(a)
    <type 'int'>
    >>> b=a*2
    >>> type(b)
    <type 'long'>
    

    이 경우 int 클래스에는 필요한 경우 long 결과를 만드는 __mul__ 메서드 (*를 구현하는 메서드)가 있습니다.

  8. ==============================

    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의 크기에 관계없이 항상 를 반환합니다.

  9. from https://stackoverflow.com/questions/2104884/how-does-python-manage-int-and-long by cc-by-sa and MIT license