我有以下格式的字典:
演示代码:
>>> import pprint >>> pprint.pprint(data) {'lookup': {'F01': '\n.custom1 {\n background-color: #f5e9dc;\n padding: 10px;\n border-radius: 10px;\n font-family: sans-serif;\n font-size: 0.9em;\n margin-top: 1em;\n }\n.custom2 .style8-rw {\n font-family: sans-serif;\n font-weight: bold;\n color: #F57215;\n }', 'F02': '\n.custom1 {\n background-color: #f5e9dc;\n padding: 10px;\n border-radius: 10px;\n font-family: sans-serif;\n font-size: 0.9em;\n margin-top: 1em;\n }\n.custom2 .style8-rw {\n font-family: sans-serif;\n font-weight: bold;\n color: #F57215;\n }', 'F03': '\n.custom1 {\n background-color: #f5e9dc;\n padding: 10px;\n border-radius: 10px;\n font-family: sans-serif;\n font-size: 0.9em;\n margin-top: 1em;\n }\n.custom2 .style8-rw {\n font-family: sans-serif;\n font-weight: bold;\n color: #F57215;\n }', 'F04': '\n.custom1 {\n background-color: #f5e9dc;\n padding: 10px;\n border-radius: 10px;\n font-family: sans-serif;\n font-size: 0.9em;\n margin-top: 1em;\n }\n.custom2 .style8-rw {\n font-family: sans-serif;\n font-weight: bold;\n color: #F57215;\n }', 'F05': '\n.custom1 {\n background-color: #f5e9dc;\n padding: 10px;\n border-radius: 10px;\n font-family: sans-serif;\n font-size: 0.9em;\n margin-top: 1em;\n }\n.custom2 .style8-rw {\n font-family: sans-serif;\n font-weight: bold;\n color: #F57215;\n }', 'F06': '\n.custom1 {\n background-color: #f5e9dc;\n padding: 10px;\n border-radius: 10px;\n font-family: sans-serif;\n font-size: 0.9em;\n margin-top: 1em;\n }\n.custom2 .style8-rw {\n font-family: sans-serif;\n font-weight: bold;\n color: #F57215;\n }', 'F07': '\n.custom1 {\n background-color: #f5e9dc;\n padding: 10px;\n border-radius: 10px;\n font-family: sans-serif;\n font-size: 0.9em;\n margin-top: 1em;\n }\n.custom2 .style8-rw {\n font-family: sans-serif;\n font-weight: bold;\n color: #F57215;\n }', 'F08': '\n.custom1 {\n background-color: #f5e9dc;\n padding: 10px;\n border-radius: 10px;\n font-family: sans-serif;\n font-size: 0.9em;\n margin-top: 1em;\n }\n.custom2 .style8-rw {\n font-family: sans-serif;\n font-weight: bold;\n color: #F57215;\n }', 'F09': '\n.custom1 {\n background-color: #f5e9dc;\n padding: 10px;\n border-radius: 10px;\n font-family: sans-serif;\n font-size: 0.9em;\n margin-top: 1em;\n }\n.custom2 .style8-rw {\n font-family: sans-serif;\n font-weight: bold;\n color: #F57215;\n }', 'F10': '\n.custom1 {\n background-color: #f5e9dc;\n padding: 10px;\n border-radius: 10px;\n font-family: sans-serif;\n font-size: 0.9em;\n margin-top: 1em;\n }\n.custom2 .style8-rw {\n font-family: sans-serif;\n font-weight: bold;\n color: #F57215;\n }', 'F11': '\n.custom1 {\n background-color: #f5e9dc;\n padding: 10px;\n border-radius: 10px;\n font-family: sans-serif;\n font-size: 0.9em;\n margin-top: 1em;\n }\n.custom2 .style8-rw {\n font-family: sans-serif;\n font-weight: bold;\n color: #F57215;\n }', 'F12': '\n.custom1 {\n background-color: #f5e9dc;\n padding: 10px;\n border-radius: 10px;\n font-family: sans-serif;\n font-size: 0.9em;\n margin-top: 1em;\n }\n.custom2 .style8-rw {\n font-family: sans-serif;\n font-weight: bold;\n color: #F57215;\n }'}, 'sequence': ['F01', 'F02', 'F03', 'F04', 'F05', 'F06', 'F07', 'F08', 'F09', 'F10', 'F11', 'F12']} >>> import sys >>> sys.getsizeof(data) 136 >>> sys.getsizeof(data["sequence"]) 80 >>> sys.getsizeof(data["lookup"]) 520 >>>
我无法获得嵌套字典在内存中的存储方式,因为size如果data是136个字节,sizedata["sequence"]是80个字节,而且sizedata["lookup"]是520个字节。
data
data["sequence"]
data["lookup"]
另外,当我对类型从dictionary到的变量数据进行类型转换时string,字符串变量的大小为3587 bytes。
dictionary
string
3587 bytes
>>> data_str = str(data) >>> sys.getsizeof(data_str) 3587
可以解释一下为什么吗?
字典和列表存储 引用 (类似于Python中的其他所有标准容器)。sys.getsizeof()不遵循引用,它给你的C结构的内存占用 唯一 。引用是C指针;它们的大小取决于您的特定平台。
sys.getsizeof()
将字典转换为repr()字符串也将内容递归转换为()字符串,因此所有这些引用都将被取消引用并包含在输出中。请注意,这并不是对原始对象的内存大小的准确反映。字符串包含字符,这取决于您的确切Python版本,操作系统以及所使用的Unicode代码点范围,每个字符占用多少内存,并且字符数与所反映的实际对象具有非线性关系。
repr()
如果您想知道 包含内容 的字典的内存占用量, 则 需要递归地进行操作。考虑到字典可以包含对其本身(直接或间接)的引用,或者任何对象可以具有对其的多个引用,并且只应计数 一次 。我将使用该id()函数来跟踪已处理的对象。
id()
已经有几篇文章讨论了使用递归或其他工具计算容器的内存大小,请参见sys.getsizeof的Deep版本,Python的带有内容的deepgetsizeof列表?,以及Python中字典的内存使用情况?对于一些例子。