【问题标题】:pickle.dumps output size increases when input is generated using json.loads使用 json.loads 生成输入时,pickle.dumps 输出大小会增加
【发布时间】:2021-06-09 11:09:20
【问题描述】:

在 Python 2.7.16 中:

import json
import pickle

list1 = [{u'key': 1}, {u'key': 2}]
list2 = json.loads('[{"key": 1}, {"key": 2}]')

pickle.dumps(list1)
# outputs '(lp0\n(dp1\nVkey\np2\nI1\nsa(dp3\ng2\nI2\nsa.'

pickle.dumps(list2)
# outputs '(lp0\n(dp1\nVkey\np2\nI1\nsa(dp3\nVkey\np4\nI2\nsa.'

为什么pickle.dumps 的输出对于list1list2 不同?

pickle.dumps(list1) 的输出只包含一次字符串key,尽管key 出现在两个列表条目中,所以那里似乎有一些优化。但是,pickle.dumps(list2) 的输出包含字符串 key 的两个实例。

【问题讨论】:

    标签: python-2.7 pickle


    【解决方案1】:

    事实证明这是由于字符串实习。在list1 中,两个键"key" 都指向同一个内存地址,因为Python 已经对字符串进行了实习。在list2 中,key 有不同的内存地址,这表明json.loads 没有做任何字符串实习。

    如果有人有与我们类似的用例(即最小化从 JSON 加载的对象的内存占用),simplejson 似乎使用字符串实习。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-20
      • 2015-08-18
      • 2020-09-01
      • 2013-02-05
      • 2017-06-01
      • 2015-09-08
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多