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...等等。但是,这是我的其他问题:
一开始,我可以看到另外两个字节在变化,那些值是多少?
除了那些 \x00,我可以看到其他一些字节,例如 ...\xc0\x92\x17\x00\x01...
如何解释这些值?
是否有任何资源可供我学习如何 python 在内存中存储变量?
下载 Python C 源代码并研究它们。您会看到 "almost everything" 是一个 PyObject*
—— 一个指向 PyObject
struct
的指针。您看到的 \x01
&c 只是其中一些指针中的随机字节,与您看到的 1,2,3
元组无关,至少不是直接的!
我想知道 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...等等。但是,这是我的其他问题:
一开始,我可以看到另外两个字节在变化,那些值是多少?
除了那些 \x00,我可以看到其他一些字节,例如
...\xc0\x92\x17\x00\x01...
如何解释这些值?是否有任何资源可供我学习如何 python 在内存中存储变量?
下载 Python C 源代码并研究它们。您会看到 "almost everything" 是一个 PyObject*
—— 一个指向 PyObject
struct
的指针。您看到的 \x01
&c 只是其中一些指针中的随机字节,与您看到的 1,2,3
元组无关,至少不是直接的!