Кто-нибудь знает, как Python управляет внутренними типами int и long?
- Подбирает ли он правильный тип динамически?
- Какой предел для int?
- Я использую Python 2.6, отличается ли он от предыдущих версий?
Как мне понять приведенный ниже код?
>>> print type(65535)
<type 'int'>
>>> print type(65536*65536)
<type 'long'>
Обновить:
>>> print type(0x7fffffff)
<type 'int'>
>>> print type(0x80000000)
<type 'long'>
realloc
них все в порядке. Но я не совсем уверен, поэтому оставлю ответ кому-нибудь другому.var = 666L
int
- это Clong
(по умолчанию подписан) ... см .<CPython 2.X source>/Include/intobject.h
: typedef struct {PyObject_HEAD long ob_ival; } PyIntObject; В любом случае Python 2.xint
допускает отрицательные числа; Cunsigned
просто не справился бы.Ответы:
int
иlong
были "унифицированы" несколько версий назад . До этого можно было переполнить int через математические операции.3.x продвинулся дальше, полностью исключив long и сохранив только int.
sys.maxint
содержит максимальное значение, которое может содержать Python int.sys.getsizeof()
.sys.maxsize
содержит максимальный размер в байтах, который может быть Python int.sys.maxsize
.источник
int
такой же, как Python 2long
).Этот PEP должен помочь.
Суть в том, что вам действительно не нужно беспокоиться об этом в версиях python> 2.4
источник
На моей машине:
Python использует целые числа (32-битные целые числа со знаком, я не знаю, являются ли они целыми числами C под капотом или нет) для значений, которые вписываются в 32-битные значения, но автоматически переключается на longs (произвольно большое количество бит - т.е. bignums) для чего угодно больше. Я предполагаю, что это ускоряет работу с меньшими значениями, избегая любых переполнений с плавным переходом на большие значения.
источник
Интересный. В моем 64-битном (i7 Ubuntu) поле:
Угадайте, что на большей машине он увеличивает до 64 бит.
источник
Python 2.7.9 автоматически продвигает числа. Для случая, когда вы не уверены в использовании int () или long ().
источник
Python 2 автоматически установит тип в зависимости от размера значения. Руководство по максимальным значениям можно найти ниже.
Максимальное значение Int по умолчанию в Python 2 - 65535, все, что выше, будет длинным.
Например:
В Python 3 длинный тип данных был удален, и все целочисленные значения обрабатываются классом Int. Размер Int по умолчанию будет зависеть от архитектуры вашего процессора.
Например:
Минимальные / максимальные значения каждого типа можно найти ниже:
Если размер вашего Int превышает указанные выше ограничения, python автоматически изменит его тип и выделит больше памяти для обработки этого увеличения минимальных / максимальных значений. Если в Python 2 он преобразовывался в long, теперь он просто преобразуется в следующий размер Int.
Пример: если вы используете 32-битную операционную систему, максимальное значение Int по умолчанию будет 2147483647. Если присвоено значение 2147483648 или более, тип будет изменен на Int64.
Есть разные способы проверить размер int и выделение памяти. Примечание. В Python 3 использование встроенного метода type () всегда будет возвращать,
<class 'int'>
независимо от того, какой размер Int вы используете.источник
Начиная с python 3.x, унифицированные целочисленные библиотеки даже умнее, чем старые версии. В моем (i7 Ubuntu) я получил следующее:
За подробностями реализации обратитесь к
Include/longintrepr.h, Objects/longobject.c and Modules/mathmodule.c
файлам. Последний файл - это динамический модуль (скомпилированный в файл so). Код хорошо прокомментирован.источник
Просто продолжу все ответы, которые были здесь даны, особенно @James Lanes
размер целочисленного типа может быть выражен этой формулой:
общий диапазон = (2 ^ битная система)
нижний предел = - (2 ^ битовая система) * 0,5 верхний предел = ((2 ^ битовая система) * 0,5) - 1
источник
Он управляет ими, потому что
int
иlong
являются определениями родственных классов. У них есть соответствующие методы для +, -, *, / и т. Д., Которые будут давать результаты соответствующего класса.Например
В этом случае у класса
int
есть__mul__
метод (тот, который реализует *), которыйlong
при необходимости создает результат.источник