python 变量在内存中的样子

How python variables look like in memory

我想知道 Python 变量(整数、列表、元组)在内存中的样子。这就是我现在的位置。

from ctypes import string_at
from sys import getsizeof
from binascii import hexlify
string_at(id(a), getsizeof(a))

我预计它将 return 内存中变量的十六进制表示。

但是,当我将值 1,2,3 赋值给变量 'a' 时,这里是输出:

1 - '\xd6\x05\x00\x00\x00\x00\x00\x00\xc0\x92\x17\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00'
2 - '\x17\x02\x00\x00\x00\x00\x00\x00\xc0\x92\x17\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00'
3 - '\xdc\x00\x00\x00\x00\x00\x00\x00\xc0\x92\x17\x00\x01\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00'
4 - '\x06\x01\x00\x00\x00\x00\x00\x00\xc0\x92\x17\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00'

靠近中间的某个地方,我可以看到\x01、\x02...等等。但是,这是我的其他问题:

  1. 一开始,我可以看到另外两个字节在变化,那些值是多少?

  2. 除了那些 \x00,我可以看到其他一些字节,例如 ...\xc0\x92\x17\x00\x01... 如何解释这些值?

  3. 是否有任何资源可供我学习如何 python 在内存中存储变量?

下载 Python C 源代码并研究它们。您会看到 "almost everything" 是一个 PyObject* —— 一个指向 PyObject struct 的指针。您看到的 \x01 &c 只是其中一些指针中的随机字节,与您看到的 1,2,3 元组无关,至少不是直接的!