我有一个与架构匹配的类。
class EnvelopeData(object):
def __init__(self):
self.envelope_data = OrderedDict()
self.table = table_name
self.payload = payload
def get_envelope_data(self, use_hex_encoding):
"""
Getting the envelope data to be sent with the actual record payload
:param use_hex_encoding:
:raise:
"""
self.envelope_data["table"] = self.table.encode(STRING_ENCODING)
self.envelope_data["payload"] = Utility.get_serialized_avro(self.table,
hex_encoding=use_hex_encoding)
print "For schema_name ", self.schema, sys.getsizeof(self.envelope_data["table"])+sys.getsizeof(self.envelope_data["payload"])
以及我打印时
a = EnvelopeData()
a.get_envelope_data()
print sys.getsizeof(a.envelope_data)
里面元素的大小>包含该元素的ordereddict的大小。所以,我很困惑dict如何占用较小的空间,而不是它的构成元素。
答案 0 :(得分:2)
通过sys.getsizeof()
文档,您可以看到它具体说:
只考虑直接归因于对象的内存消耗,而不是它所引用的对象的内存消耗。
意思是,字典中的项目不算作大小的一部分,只计算字典对象本身 它还链接到递归sizeof recipe,其中包括字典中的项目。