字典和列表存储 引用 (类似于Python中的其他所有标准容器)。
sys.getsizeof()不遵循引用,它给你的C结构的内存占用 唯一
。引用是C指针;它们的大小取决于您的特定平台。
将字典转换为
repr()字符串也将内容递归转换为()字符串,因此所有这些引用都将被取消引用并包含在输出中。请注意,这并不是对原始对象的内存大小的准确反映。字符串包含字符,这取决于您的确切Python版本,操作系统以及所使用的Unipre代码点范围,每个字符占用多少内存,并且字符数与所反映的实际对象具有非线性关系。
如果您想知道 包含内容 的字典的内存占用量, 则
需要递归地进行操作。考虑到字典可以包含对其本身(直接或间接)的引用,或者任何对象可以具有对其的多个引用,并且只应计数 一次
。我将使用该
id()函数来跟踪已处理的对象。
Stack
Overflow上已经有几篇文章讨论了使用递归或其他工具计算容器的内存大小,请参见sys.getsizeof的Deep版本,Python的带有内容的deep
getsizeof列表?,以及Python中字典的内存使用情况?对于一些例子。



