【发布时间】:2018-10-23 12:18:02
【问题描述】:
我可以期望相同的腌制字典的字符串表示在不同的机器/运行中对于相同的 Python 版本是一致的吗? 在同一台机器上运行一次的范围?
例如
# Python 2.7
import pickle
initial = pickle.dumps({'a': 1, 'b': 2})
for _ in xrange(1000**2):
assert pickle.dumps({'a': 1, 'b': 2}) == initial
它是否取决于我的 dict 对象的实际结构(嵌套值等)?
更新: 问题是 - 无论我的 dict 对象看起来如何(什么键/值等),我实际上都不能让上面的代码在一次运行(Python 2.7)的范围内失败
【问题讨论】:
-
绝对不是。你有充分的理由使用字符串表示吗?您使用
xrange,这意味着 Python 2,其中字典中键的顺序是任意的(这使得字符串表示无用)。 -
上面的代码可以工作(一次运行 ofc),所以真的“没用”吗?我也想了解这样的行为,所以我有一个很好的理由提出这样的问题:)
-
正如已经指出的那样,您的 dict 的腌制表示可能会有所不同。但是,即使在这种情况下,未选择的字典也会与原始字典进行比较,这不是真正重要的吗?
-
不,在我的问题中,腌制对象的字符串表示很重要,就是这样
-
如果您需要维护顺序和维护数据类型,为什么不使用
collections.OrderedDict?
标签: python python-2.7 pickle