我在python
中对同一个列表进行了两次引用x = y = []
然后我将它们腌制成pickle.dump
的文本文件,但是当我再次使用pickle.load
加载它们时,它们变成了两个具有不同内存地址的不同列表。在酸洗过程中,如何保持参考关系?
答案 0 :(得分:5)
如果你将x
和y
作为两个单独的列表进行挑选,那么当你取消它们时,它们将不会共享参考,无论它们是否事先做过;腌制对象,而不是引用:
>>> 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
但是你可能只是挑选一个清单!