引用在Python中被腌制搞砸了

时间:2014-08-19 14:45:30

标签: python reference pickle

我在python

中对同一个列表进行了两次引用
x = y = []

然后我将它们腌制成pickle.dump的文本文件,但是当我再次使用pickle.load加载它们时,它们变成了两个具有不同内存地址的不同列表。在酸洗过程中,如何保持参考关系?

1 个答案:

答案 0 :(得分:5)

如果你将xy作为两个单独的列表进行挑选,那么当你取消它们时,它们将不会共享参考,无论它们是否事先做过;腌制对象,而不是引用

>>> import pickle
>>> x = y = [1, 2]
>>> with open('test.txt', 'w') as f:
    pickle.dump(x, f)
    pickle.dump(y, f)


>>> with open('test.txt') as f:
    x = pickle.load(f)
    y = pickle.load(f)


>>> x == y
True
>>> x is y
False

如果您希望在load之后分享两个名称,则可以pickle一个容器:

>>> x = y = [1, 2]
>>> with open('text.txt', 'w') as f:
    pickle.dump([x, y], f)


>>> with open('text.txt') as f:
    x, y = pickle.load(f)


>>> x == y
True
>>> x is y
True

但是你可能只是挑选一个清单!