我的背景:python的新手,大多数编程经验都是使用C和Java。
我的理解是Python使用列表作为基本的“数组”数据结构。在C中,保证数组具有连续的内存分配。 Python中列表的底层内存布局是什么?
例如,可以了解'block'的内存布局(见下文)?我很想通过指针来考虑访问列表中的元素,就像在C中那样,但我认为我需要一个新的Python范例。
block = blocksize * [0]
无论如何,我真正的问题。 我需要将一大块内存传递给'blocksize'长度的函数。在Python中执行此操作的最佳方法是什么?目前,这就是我正在做的事情:
zero_block = blocksize * [0]
z = SHA256.new(array.array('b',zero_block)).hexdigest()
我的理解是'zero_block'是一个列表, array.array(typecode [,initializer])将调用 array.fromlist()来填充数组
总结一下:
感谢。
PS。这是我的第一个StackOverflow问题;
答案 0 :(得分:1)
在Python 2.x中,处理连续数据块的最佳方法是字符串。对于更高级的数据结构,您不应该真正考虑如何存储它们。相反, if 您需要与想要特定二进制结构的东西进行交互,然后考虑如何将Python数据转换为具有该格式的字符串,和/或反之亦然。查看“struct”模块。
'\0' * blocksize
Python中没有关于指针或内存寻址概念的地方,这是它的优势之一。内存将根据需要自动分配和释放。