【发布时间】: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()来填充数组.
总结一下:
- 在 Python 中考虑数据类型(例如列表、集合、字典等)的内存布局的正确方法是什么?
- 在上面的代码中,用 'blocksize' 大小创建零数组的更好方法是什么?
- 指针和内存寻址的概念在哪里/如何适合 Python?
谢谢。
ps。这是我问的第一个 StackOverflow 问题;
【问题讨论】:
-
python 列表被实现为数组(即指针的数组)。如果你愿意潜入 C,go for it :-)
-
规范没有说明内存布局(据我所知)。 “幕后”的东西完全取决于你使用的任何 Python 实现(CPython、Jython、IronPython、PyPy 等)
标签: python arrays list python-2.7