Arrays python中是否有可变二进制数组?

Arrays python中是否有可变二进制数组?,arrays,python-3.x,mutable,Arrays,Python 3.x,Mutable,Python3中是否有一个数据结构是布尔值True或False的数组?此外,此数组是否比字节数组更高效 我需要能够将值从True更改为False,并通过索引访问它;但是我不需要改变数组的大小 编辑:另外,如果移动命令比索引快,这也很好,那么使用数组怎么样 import array a = array.array("B", [0]*10) #fix size of 10 - all False a[1] = 1 # Mutable, Yay! print(a) 它将使用最少的内存量,并将为您提

Python3中是否有一个数据结构是布尔值True或False的数组?此外,此数组是否比字节数组更高效

我需要能够将值从True更改为False,并通过索引访问它;但是我不需要改变数组的大小

编辑:另外,如果移动命令比索引快,这也很好,那么使用数组怎么样

import array
a = array.array("B", [0]*10) #fix size of 10 - all False

a[1] = 1 # Mutable, Yay!
print(a)

它将使用最少的内存量,并将为您提供O(1)索引。通常,最好为每个值使用一个字节而不是一个位来支付费用。为此,您可以使用
bytearray
(自2.6以来的内置程序):

a = bytearray(100)            # 100 values all initialized to 0/False
# or initially true:
b = bytearray(b'\x01' * 100)  # 100 values all initialized to 1/True

# While you'll get 0 and 1 back, True and False can be assigned to it
a[1] = True
b[1] = False
这通常是最好的选择,因为在大多数情况下使用字节寻址更有效,除非它会导致数据从RAM溢出到交换文件


如果您确实需要为许多标志留出空间,那么您需要一个第三方软件包,该软件包可以优化以获得每个值一位,例如(C扩展以获得最大速度,但在许多情况下仍比bytearray慢)或(纯Python,最大限度地减少编译复杂度,有时更容易提供附加功能,但在不受内存限制的情况下,速度要比bytearray慢).

此数组是否比字节数组更节省内存?仅供参考,它不需要导入或使用格式代码,并且在某些用途下效率更高(在2.x中,
array
不支持缓冲协议;它不能与/
memoryview
或其他需要“类似字节对象”的API一起使用)
bytearray
支持缓冲协议)。此外,使用
[0]*x初始化
数组
意味着创建一个临时的
列表,列出结果大小的4-8倍,然后对其进行迭代;
array.array('B',B'\0'*10)
(或'B'\1'*10)是2倍,并且随着大小的增加速度会更快。@user4757074:
array。array('B')
是一个(动态)字节数组(在C意义上),就像
bytearray
。每增加一个值都会花费(摊销,它通过乘法过程增长以最小化实数)与
列表
元组
相比,要存储一个额外的字节,只要
列表
/
元组
仅填充0/
False和1/
True,则每个值需要一个指针大小的变量(在32位和64位体系结构上分别为4个或8个字节)(它们在CPython中是单例的,所以您不需要为每个单独的引用支付对象开销)