如果我有python列表,请说:['aaa', 'bbb']
。此列表是以2x8字节存储的(用于64位寻址)-即我们在列表中仅具有指向字符串的指针,还是存储在[len('aaa')+len('bbb')]*size_of_char
中-即我们在其中连续存储了每个字符串的字符列表。
答案 0 :(得分:3)
访问python地址的一种方法是使用id()。
>>> a=['aaa', 'bbb']
>>> id(a)
62954056
>>> id(a[0])
62748912
>>> id(a[1])
61749544
进一步的阅读是here [understanding-python-variables and memory management]。
答案 1 :(得分:2)
在CPython中,所有内容都是指向PyObject
的指针。子类型PyListObject
的结构字段中有一个指向PyObjects
的指针数组的指针。
字符串也是PyObject
的子类型,通常在PyUnicodeObject
中实现。类似于列表,字符串包含指向包含其元素的缓冲区的指针。
所以指针的顺序实际上是这样的:
您可以从多种原因推断出列表缓冲区中不能包含[len('aaa') + len('bbb')] * size_of_char
个元素的事实。
通常,如果您对CPython的内部运行方式感到好奇,请查看API docs和source code。