Python 列表中某项所需的内存

Python 列表中某项所需的内存,python,arrays,list,memory,Python,Arrays,List,Memory,我已经学习python一年了。在课堂幻灯片中,我看到编译器通常分配4个字节来存储列表中的项目 为什么编译器不能动态分配内存?例如,如果我有一个小值,为什么编译器不分配1或2个字节来存储它,它会更节省内存吗?32位整数是什么意思,其中一位是符号位,31位代表数字?一个字节等于8位,一个整数等于32位,那么为什么他们要用8个字节来表示它,而在一些计算机中,他们浪费了4个字节。顺便说一句,在有些计算机中,64位,他们可以使用8个字节,这只会影响到你能表示的更多的数字。位数越多==>数字就越多。它只涉及

我已经学习python一年了。在课堂幻灯片中,我看到编译器通常分配4个字节来存储列表中的项目


为什么编译器不能动态分配内存?例如,如果我有一个小值,为什么编译器不分配1或2个字节来存储它,它会更节省内存吗?

32位整数是什么意思,其中一位是符号位,31位代表数字?一个字节等于8位,一个整数等于32位,那么为什么他们要用8个字节来表示它,而在一些计算机中,他们浪费了4个字节。顺便说一句,在有些计算机中,64位,他们可以使用8个字节,这只会影响到你能表示的更多的数字。位数越多==>数字就越多。它只涉及处理器和寄存器。

列表或数组中的元素不需要4个字节

在具有强静态类型的语言中(即在使用变量之前必须声明变量的类型),数组的大小正好等于数组的大小乘以该类型的每个变量的大小。在C语言中,char类型通常使用一个字节,int类型使用的字节数量取决于系统的体系结构

在具有动态类型的语言(如Python)中,所有变量都实现为包含指针(指向内存中实际存储数据的位置)和标签(指示变量的类型,在运行时将使用该类型来确定变量在执行操作时的行为)的对象


4字节的问题可能是指许多体系结构使用4字节的整数,但这是巧合,这是一种考虑它的规则。

内部,一个CPython <代码>列表< /C>使用一组指针来存储对每个项的引用。这些指针在32位机器上占用4字节=32位,在64位机器上占用8字节。这些项本身将占用大量RAM,当您调用
列表上的
sys.getsizeof
时,这些RAM不会被报告。我不知道您是从哪里得到这种印象的。从根本上说,列表和数组是非常不同的数据结构,您不应该将它们混淆。基元数组的大小是可变的,它们可以并且确实为元素使用各种各样的大小。例如,仅使用数字,就可以有8、16、32和64位整数。在CPython中,列表被实现为Py_对象指针的动态数组。每个指针通常占用一个机器字,因此64位系统占用8字节,32位系统占用4字节。但这并没有考虑Python对象的内存,它可以任意大……这是真的,它取决于您使用的处理器。使用64位处理器,您可以处理2*32位整数,这是因为您可以认为寄存器具有64位。这不是真的,因为它不能推广到大多数编程语言或处理器,正如问题所暗示的那样。正如我所说的,这在特定情况下是正确的,但在大多数语言中不是这样。那么,你能告诉我一种命令式语言,其中的限制是无界的吗?我不确定我们谈论的是同一件事。。。?在C语言中,如果我们有一个char数组,那么数组中的每个项都将占用一个字节。正如juanpa.arrivillaga在上面的评论所指出的,数组和列表不应该混淆;列表可以通过指针数组来实现,这意味着每个项目都将采用列表中指针的大小,加上其在内存中的任意表示形式的大小。当然,在C语言中,只要有地址空间,就可以。这不是对语言的贬低,我也不认为这是OP的要求