在Python 2.7中创建任意大小的数组的最简单方法

时间:2014-03-04 03:31:40

标签: python arrays list python-2.7

  

我的背景: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()来填充数组

总结一下:

  1. 在Python中考虑数据类型(例如列表,集合,dicts等)的内存布局的正确方法是什么?
  2. 在上面的代码中,使用'blocksize'大小创建零数组的更好方法是什么?
  3. 指针和内存寻址的概念在哪里/如何适合Python?
  4. 感谢。

    PS。这是我的第一个StackOverflow问题;

1 个答案:

答案 0 :(得分:1)

  1. 在Python 2.x中,处理连续数据块的最佳方法是字符串。对于更高级的数据结构,您不应该真正考虑如何存储它们。相反, if 您需要与想要特定二进制结构的东西进行交互,然后考虑如何将Python数据转换为具有该格式的字符串,和/或反之亦然。查看“struct”模块。

  2. '\0' * blocksize

  3. Python中没有关于指针或内存寻址概念的地方,这是它的优势之一。内存将根据需要自动分配和释放。