Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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,那是很大的空间 我正在开发一个解决问题的程序,我唯一的要求是有一个列表,该列表将存储多个值为0到100的int 据我所知,这个范围的int可以存储8位。因此总尺寸为len(列表)*8 那么,在python中,这样做是可能的吗?首先,返回的是字节,而不是位。所以你要找3个。但是,这是不可能的,因为所有Python对象都有开销。同样,列表实际上并不包含它们的元素,而是指向它们的指针。然后我确信有很多实现细节会使事情更加复杂,但我没有资格谈论它们 这就是说,您可以更接近,它实际上包含它的元素 List

那是很大的空间

我正在开发一个解决问题的程序,我唯一的要求是有一个列表,该列表将存储多个值为0到100的
int

据我所知,这个范围的
int
可以存储8位。因此总尺寸为
len(列表)*8

那么,在python中,这样做是可能的吗?

首先,返回的是字节,而不是位。所以你要找3个。但是,这是不可能的,因为所有Python对象都有开销。同样,列表实际上并不包含它们的元素,而是指向它们的指针。然后我确信有很多实现细节会使事情更加复杂,但我没有资格谈论它们

这就是说,您可以更接近,它实际上包含它的元素

List = [1,2,3]
print(sys.getsizeof(List))

Output : 96
在这个尺度上,差异是微乎其微的,但只要256个元素,它就是一个数量级

import array
import sys

L = [1, 2, 3]
print(sys.getsizeof(L))  # -> 80

a = array.array('B', L)  # "B" stands for "byte", AKA "unsigned char" in C
print(sys.getsizeof(a))  # -> 67

有关更高级的用途,请查看NumPy的


你也可以考虑使用A,尽管语义上它不那么有意义,因为你试图把数字存储为字节,而不是字节本身。看看下面的报告,看看我的意思

import numpy as np

nda = np.array(L, dtype='uint8')
print(sys.getsizeof(nda))  # -> 352
首先,返回字节,而不是位。所以你要找3个。但是,这是不可能的,因为所有Python对象都有开销。同样,列表实际上并不包含它们的元素,而是指向它们的指针。然后我确信有很多实现细节会使事情更加复杂,但我没有资格谈论它们

这就是说,您可以更接近,它实际上包含它的元素

List = [1,2,3]
print(sys.getsizeof(List))

Output : 96
在这个尺度上,差异是微乎其微的,但只要256个元素,它就是一个数量级

import array
import sys

L = [1, 2, 3]
print(sys.getsizeof(L))  # -> 80

a = array.array('B', L)  # "B" stands for "byte", AKA "unsigned char" in C
print(sys.getsizeof(a))  # -> 67

有关更高级的用途,请查看NumPy的


你也可以考虑使用A,尽管语义上它不那么有意义,因为你试图把数字存储为字节,而不是字节本身。看看下面的报告,看看我的意思

import numpy as np

nda = np.array(L, dtype='uint8')
print(sys.getsizeof(nda))  # -> 352

不,至少据我所知,这回答了你的问题吗?使用
numpy
,它允许您选择字节类型并将开销降至最低。列表的大小与列表元素的大小完全无关-它实际存储的只是对元素的引用,这些元素将是32位或64位指针,具体取决于您平台的位大小。Python!=一切都是一个物体。变量引用对象,没有大小。不,至少据我所知,这回答了你的问题吗?使用
numpy
,它允许您选择字节类型并将开销降至最低。列表的大小与列表元素的大小完全无关-它实际存储的只是对元素的引用,这些元素将是32位或64位指针,具体取决于您平台的位大小。Python!=一切都是一个物体。变量引用对象,并且没有大小。这比bytearray有优势吗?@好吧,我想从语义上讲它更有意义。我们将数字存储为字节,而不是字节本身。另外,
bytearray
不支持我在这里使用的带符号整数,尽管这并不重要,也与问题无关。这比
bytearray
有优势吗?@好吧,我想从语义上讲,它更有意义。我们将数字存储为字节,而不是字节本身。另外,
bytearray
不支持我在这里使用的签名整数,尽管这并不重要,也与问题无关。