我在python中寻找整数的最小值和最大值.例如,在Java中,我们有Integer.MIN_VALUE和Integer.MAX_VALUE.在python中有这样的东西吗?
__sizeof__在不同的Python对象上尝试使用魔术方法(特别是)我偶然发现了以下行为:
Python 2.7
>>> False.__sizeof__()
24
>>> True.__sizeof__()
24
Run Code Online (Sandbox Code Playgroud)
Python 3.x
>>> False.__sizeof__()
24
>>> True.__sizeof__()
28
Run Code Online (Sandbox Code Playgroud)
Python 3中改变了什么使得大小True超过了False?
在python的源代码中,有一些像这样的宏定义:
#define PyObject_HEAD \
int ob_refcnt; \
struct _typeobject *ob_type;
#define PyObject_VAR_HEAD \
PyObject_HEAD \
int ob_size;
typedef struct _object {
PyObject_HEAD
} PyObject;
typedef struct _object {
PyObject_HEAD
long ob_ival;
} PyIntObject;
typedef struct {
PyObject_VAR_HEAD
} PyVarObject;
Run Code Online (Sandbox Code Playgroud)
问题是,为什么PyObject*可以指向python中的每个对象(例如PyIntObject,PyVarObject)?
是否有可能使Python使用少于12个字节的int?
>>> x=int()
>>> x
0
>>> sys.getsizeof(x)
12
Run Code Online (Sandbox Code Playgroud)
我不是计算机专家,但不是12字节过多?
我想存储的最小int是0,最大的int 147097614,所以我不应该需要超过4个字节.
(这里可能有一些我误解的东西,因为我无法在网上的任何地方找到答案.记住这一点.)
我打算获得int的最大大小
In [1]: import sys
In [2]: sys.getsizeof(int)
Out[2]: 400
Run Code Online (Sandbox Code Playgroud)
这是否意味着python中的maxint是2**40
但是,当我尝试
In [5]: types = [int, float, complex, list, tuple, dict, set, True, False, None]
In [7]: [sys.getsizeof(type) for type in types]
Out[7]: [400, 400, 400, 400, 400, 400, 400, 28, 24, 16]
Run Code Online (Sandbox Code Playgroud)
所有数据类型都是400字节.
400字节对整数意味着什么?
我检查了Python持有的最大整数sys.maxsize,它返回了我9223372036854775807。
那为什么我仍然可以存储一个大于该范围的值?
存储一个整数需要多少个字节,Python是否根据整数的大小更改字节数?
我正在使用Python 3.6
我正在运行 64 位机器。如果我输入getsizeof(int()),我会得到 24。使用这 24 个字节的元素或对象是什么?下面是一些更令人困惑的结果:
getsizeof(0)returns 24.
getsizeof(1)returns 28. 为什么 1 比 0 多占用 4 个字节?并getsizeof(1.5)返回 24。为什么浮点数 1.5 的大小比整数 1 小。
我读到PyObject有用于垃圾收集的类型、值和引用计数。但下面显示每个整数对象占用 32 个字节,对于 64 位操作系统,似乎还有一个字段。那会是什么?
>>> hex(id(3))
'0x1595ae90130'
>>> hex(id(4))
'0x1595ae90150'
>>> hex(id(5))
'0x1595ae90170'
Run Code Online (Sandbox Code Playgroud)
您会发现 ID 之间的间隔为 32 个字节。