Bac*_*b32 5 python indexing list python-3.x
假设我们有
a = [1, 2, 3]
每当我在列表中使用索引时,例如0, 1,2在这种情况下,python3 如何通过知道索引来检索元素?除了索引之外,列表中的每个元素是否有任何特定的地址?
从技术上讲,数组(Python 中的列表)存储的是指针而不是对象本身,这使得数组只能包含特定大小的元素,即使是 Python 中的混合类型列表也是如此。
\n\n来自Python文档:
\n\n\n\n\nCPython\xe2\x80\x99s 列表实际上是变长数组,而不是 Lisp 风格的链表。该实现使用对其他对象的连续引用数组,并在列表头结构中保留指向该数组的指针和数组 xe2x80x99sn 长度。
\n\n这使得索引列表 a[i] 成为一种操作,其成本与列表的大小或索引的值无关。
\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当 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| 归档时间: |
|
| 查看次数: |
1750 次 |
| 最近记录: |