Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符和整数在Python中的存储方式_Python - Fatal编程技术网

字符和整数在Python中的存储方式

字符和整数在Python中的存储方式,python,Python,我知道在C语言中,字符是1字节,整数是4字节。当我在Python中运行此代码以确定字符和整数的存储时,会得到意外值。有人能解释这种差异吗 >>> sys.getsizeof(1) 24 >>> sys.getsizeof(10) 24 >>> sys.getsizeof(100) 24 >>> sys.getsizeof("a") 38 >>> sys.getsizeof("b") 38 >>&

我知道在C语言中,字符是1字节,整数是4字节。当我在Python中运行此代码以确定字符和整数的存储时,会得到意外值。有人能解释这种差异吗

>>> sys.getsizeof(1)
24
>>> sys.getsizeof(10)
24
>>> sys.getsizeof(100)
24
>>> sys.getsizeof("a")
38
>>> sys.getsizeof("b")
38
>>> dump = cPickle.dumps(1)
>>> sys.getsizeof(dump)
41
>>> >>> sys.getsizeof(chr(65))
38

首先,Python没有字符类型,这些是包含一个字符的字符串。第二,PyObject头有额外的开销,尽管一些基本类型只使用了它的一部分。

您的问题是什么?最好不要担心Python类型如何映射到比特数和字节数,除非您有特定的理由这样做。Python类型是根据定义您可以使用它们做什么的API来指定的,而不是根据字节级别的特定实现来指定的。@BrenBarn我需要担心它的映射如何,我需要知道。为什么您需要知道?你打算用这些信息做什么?只是为了获取知识,就像在C语言中我知道的一样,这取决于实现。例如,在pypy中,如果JIT编译器决定一个变量可以是C int,它将使用4字节。是的,它将作为对象,但它必须处理char和int,这是我不知道的。不,Python中没有任何东西会映射到char类型(除了CFFI中专门用于与C代码接口的内容)。例如,它必须,计算机中的所有内容都是0和1,但python不接受0和1中的所有内容,它由映射编译器完成任务。我甚至不知道这意味着什么,但事实是Python没有一种类似于单字节数字的类型,无论是数字还是ASCII字符。Python有字节数组和Unicode码点数组(根据版本的不同有不同的方式)。@Hackaholic在这个基础上,为什么不用机器语言编写所有的东西呢?Python和所有编程语言一样,提供了抽象,因此您不必担心电子和硅。此外,还有不同的Python实现——选择一个(例如标准的CPython),如果您真的想知道下面发生了什么,就开始查看源代码。