Python eval vs json.loads内存消耗
我有一本字典,我正在写一个文件,然后再次加载它。字典有一些集合,因此我可以选择使用自定义ModelEncoder执行Python eval vs json.loads内存消耗,python,Python,我有一本字典,我正在写一个文件,然后再次加载它。字典有一些集合,因此我可以选择使用自定义ModelEncoder执行eval()或json.dumps() 我尝试了这两种方法,json的内存占用比eval小得多。为什么eval占用这么多内存?您是否应该使用eval实际上是另一个问题 eval占用更多内存的主要原因是首先将文本编译成python表达式(解析、转换为字节码),然后进行计算 尤其是对于较大的文本,python有一个。本期讨论pyc编译,但您还将在eval中使用代码编译 json不会因此
eval()
或json.dumps()
我尝试了这两种方法,
json
的内存占用比eval
小得多。为什么eval
占用这么多内存?您是否应该使用eval
实际上是另一个问题
eval
占用更多内存的主要原因是首先将文本编译成python表达式(解析、转换为字节码),然后进行计算
尤其是对于较大的文本,python有一个。本期讨论pyc编译,但您还将在eval中使用代码编译
json不会因此受到影响,因为它不会将文本转换为可执行字节码。您是否应该使用
eval
实际上是另一个问题
eval
占用更多内存的主要原因是首先将文本编译成python表达式(解析、转换为字节码),然后进行计算
尤其是对于较大的文本,python有一个。本期讨论pyc编译,但您还将在eval中使用代码编译
json不受此影响,因为它不会将文本转换为可执行字节码。
eval
是一种更为通用的操作。为什么它不如一个严格约束的优化那么好呢?(还有,考虑到这些限制因素排除了几类安全漏洞,你为什么还要考虑eval
?)@CharlesDuffy我保存和读取的是我的数据,所以这是一种快速的方法。一般来说,相信你的数据是一种错误。一个设计良好的部署模型通常将代码设置为只读,但不能避免数据被读写;通过将数据作为代码进行评估,您将挫败您的ops团队为防止能够存储任意数据的攻击者执行任意代码所做的努力。这绝对不是eval的用途。考虑使用,或类似的库。此外,<代码> EVA/COD>在这个上下文中使用时是错误的。参见eval
是一种更为通用的操作。为什么它不如一个严格约束的优化那么好呢?(还有,考虑到这些限制因素排除了几类安全漏洞,你为什么还要考虑eval
?)@CharlesDuffy我保存和读取的是我的数据,所以这是一种快速的方法。一般来说,相信你的数据是一种错误。一个设计良好的部署模型通常将代码设置为只读,但不能避免数据被读写;通过将数据作为代码进行评估,您将挫败您的ops团队为防止能够存储任意数据的攻击者执行任意代码所做的努力。这绝对不是eval的用途。考虑使用,或类似的库。此外,<代码> EVA/COD>在这个上下文中使用时是错误的。看见