Python3 中的列表索引是如何工作的?

Bac*_*b32 5 python indexing list python-3.x

假设我们有

a = [1, 2, 3]

每当我在列表中使用索引时,例如0, 12在这种情况下,python3 如何通过知道索引来检索元素?除了索引之外,列表中的每个元素是否有任何特定的地址?

Sam*_*ouk 7

从技术上讲,数组(Python 中的列表)存储的是指针而不是对象本身,这使得数组只能包含特定大小的元素,即使是 Python 中的混合类型列表也是如此。

\n\n

来自Python文档:

\n\n
\n

CPython\xe2\x80\x99s 列表实际上是变长数组,而不是 Lisp 风格的链表。该实现使用对其他对象的连续引用数组,并在列表头结构中保留指向该数组的指针和数组 xe2x80x99sn 长度。

\n\n

这使得索引列表 a[i] 成为一种操作,其成本与列表的大小或索引的值无关。

\n\n

当附加或插入项目时,引用数组的大小将被调整。应用了一些技巧来提高重复追加项目的性能;当必须增长数组时,会分配一些额外的空间,因此接下来的几次不需要实际调整大小。

\n
\n\n

来源:\n https://docs.python.org/3/faq/design.html#how-are-lists-implemented-in-cpython

\n\n

更多解释:

\n\n
\n\n

什么是指针?

\n\n

指针是存储内存地址的变量。指针用于存储其他变量或内存项的地址。

\n\n

以及索引如何工作?

\n\n

当 p 表示指向数组第一个元素的指针时,a[i] 与 (p + i) 含义相同:\n*(a + i)\n所以如果指针 p 指向数组的元素,则添加 n指向指针使其指向原始元素之后的第 n 个元素。这涉及在对象之间添加或减去正确的偏移量(基于引用的大小)(以字节为单位)。

\n\n

引用的大小与 CPU 的字大小相同 32 位系统上为 4 字节,64 位系统上为 8 字节

\n\n

指针数组的内存表示

\n\n

希望你能明白这一点..\n这是我在 stackoverflow 上的第一个答案,如果有帮助的话请投票。谢谢。

\n