引用被Python中的pickle弄乱了

2024-03-29 09:41:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

x = y = []

然后我用pickle.dump将它们放入一个文本文件,但是当我用pickle.load再次加载它们时,它们变成了两个不同的列表,具有不同的内存地址。如何在酸洗期间保持引用关系?你知道吗


Tags: 列表关系loaddumppickle文本文件内存地址
1条回答
网友
1楼 · 发布于 2024-03-29 09:41:36

如果将xy作为两个单独的列表进行pickle,则在取消pickle时,它们不会共享引用,而不管它们是否事先共享;对象,而不是引用,将被pickle:

>>> 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

不过,你最好还是列一张单子吧!你知道吗

相关问题 更多 >