有序指令或字典的大小小于构成要素?

时间:2016-04-05 20:52:46

标签: python ordereddictionary

我有一个与架构匹配的类。

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如何占用较小的空间,而不是它的构成元素。

1 个答案:

答案 0 :(得分:2)

通过sys.getsizeof()文档,您可以看到它具体说:

  

只考虑直接归因于对象的内存消耗,而不是它所引用的对象的内存消耗。

意思是,字典中的项目不算作大小的一部分,只计算字典对象本身 它还链接到递归sizeof recipe,其中包括字典中的项目。