我想知道Python变量(int,list,tuple)在内存中的样子。这就是我现在所处的位置。
from ctypes import string_at
from sys import getsizeof
from binascii import hexlify
string_at(id(a), getsizeof(a))
我希望它会在内存中返回变量的十六进制表示。
但是,当我将值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如何在内存中存储变量?
答案 0 :(得分:2)
下载Python C源并研究它们。你会看到"几乎所有的东西"是PyObject*
- 指向PyObject
struct
的指针。你看到的\x01
& c只是其中一些指针中的随机字节,与你看到的1,2,3
元组无关,至少不是直接的!