【发布时间】:2017-06-16 06:45:56
【问题描述】:
我有一本字典,我正在写入一个文件,然后再次加载它。字典有一些集合,所以我可以选择使用自定义 ModelEncoder 执行 eval() 或 json.dumps()。
我都试过了,json 的内存占用比eval 小得多。为什么eval 占用这么多内存?
【问题讨论】:
-
eval是一个更通用的操作。为什么它没有像严格约束的那样得到优化,这令人惊讶? (此外,考虑到这些限制在多大程度上排除了几类安全漏洞,您为什么还要考虑eval?) -
@CharlesDuffy 我正在保存和读取我的数据,所以这是一种快速的方法。
-
相信您的数据通常是错误的。一个设计良好的部署模型通常会有代码是只读的,但不能避免数据是读写的;通过将数据评估为代码,您就挫败了运维团队阻止可以存储任意数据的攻击者执行任意代码的努力。
-
另外,
eval在这种情况下使用时有问题。见Is JSON syntax a strict subset of Python syntax?
标签: python