【问题标题】:Simplest way to create an arbitrary sized array in Python 2.7在 Python 2.7 中创建任意大小数组的最简单方法
【发布时间】:2014-03-04 03:31:40
【问题描述】:

我的背景: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 中考虑数据类型(例如列表、集合、字典等)的内存布局的正确方法是什么?
  2. 在上面的代码中,用 'blocksize' 大小创建零数组的更好方法是什么?
  3. 指针和内存寻址的概念在哪里/如何适合 Python?

谢谢。

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

【问题讨论】:

  • python 列表被实现为数组(即指针的数组)。如果你愿意潜入 C,go for it :-)
  • 规范没有说明内存布局(据我所知)。 “幕后”的东西完全取决于你使用的任何 Python 实现(CPython、Jython、IronPython、PyPy 等)

标签: python arrays list python-2.7


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

  2. '\0' * blocksize

  3. 在 Python 中确实没有指针或内存寻址的概念,这是它的优势之一。内存会根据您的需要在后台自动分配和释放。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-05
    • 2020-03-20
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2011-09-12
    • 2013-01-12
    相关资源
    最近更新 更多