Python中的酸洗将引用弄乱

Python中的酸洗将引用弄乱,python,reference,pickle,Python,Reference,Pickle,我在python中两次引用了同一个列表 x = y = [] 然后我用pickle.dump将它们pickle到一个文本文件中,但是当我用pickle.load再次加载它们时,它们变成了两个具有不同内存地址的不同列表。在酸洗过程中,如何保持引用关系?如果将x和y作为两个单独的列表进行酸洗,则在您取消勾选它们时,它们不会共享引用,无论它们是否事先进行了勾选;对象(而不是引用)被pickle: >>> import pickle >>> x = y = [1,

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

x = y = []

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

如果将
x
y
作为两个单独的列表进行酸洗,则在您取消勾选它们时,它们不会共享引用,无论它们是否事先进行了勾选;对象(而不是引用)被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
如果您希望在
加载
后两个名称共享引用,您可以
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

不过,你还是把一张单子列出来吧

如果将
x
y
作为两个单独的列表进行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
如果您希望在
加载
后两个名称共享引用,您可以
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

不过,你还是把一张单子列出来吧

您正在执行
x=y=pickle.load(文件)
?在这种情况下,我希望它们指向同一个列表。当你序列化一个列表(或任何对象)时,你会复制它。您已经将同一列表的两个副本写入了一个文件,但是Python在读取时如何知道它们曾经是同一个列表?您正在执行
x=y=pickle.load(file)
?在这种情况下,我希望它们指向同一个列表。当你序列化一个列表(或任何对象)时,你会复制它。您已经将同一列表的两个副本写入了一个文件,但是Python在阅读时如何知道它们曾经是同一个列表呢?谢谢!所以实际情况是我得到了一个列表,有些元素是不同的,有些是相同的,只是同一个对象的不同名称。如果我仍然希望后一种类型共享相同的引用,我是否应该比较它们,如果它们引用的对象相同,那么让
x=y
?或者还有其他类似python的方法吗?如果你只是
pickle
整个列表,引用相同对象的索引在取消勾选后仍然会引用相同的对象。没有必要先将文件拆成单独的名称,然后将这些名称放在一个容器中,然后对其进行酸洗。谢谢!所以实际情况是我得到了一个列表,有些元素是不同的,有些是相同的,只是同一个对象的不同名称。如果我仍然希望后一种类型共享相同的引用,我是否应该比较它们,如果它们引用的对象相同,那么让
x=y
?或者还有其他类似python的方法吗?如果你只是
pickle
整个列表,引用相同对象的索引在取消勾选后仍然会引用相同的对象。没有必要先解包为单独的名称,然后将这些名称放在容器中并对其进行pickle。