引用在Python中被腌制搞砸了

ara*_*rax 1 python reference pickle

我在python中对同一个列表做了两个引用

x = y = []
Run Code Online (Sandbox Code Playgroud)

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

jon*_*rpe 5

如果你腌制xy作为两个单独的列表,他们将不会分享你的unpickle参考,无论他们是否事先做过; 腌制对象而不是引用:

>>> 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
Run Code Online (Sandbox Code Playgroud)

如果你想让两个名字在你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
Run Code Online (Sandbox Code Playgroud)

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