2012-04-05 53 views
0

我想我的程序存储数据以备后用。到目前为止,没有任何问题:在Python中执行此操作的方法有很多。Python中的持久引用

事情变得有点复杂,因为我想保持实例之间的引用。如果一个列表X是一个列表Y(它们具有相同的ID,修改其中一个就是修改另一个),下次装入数据(在此期间停止的另一个程序会话)时应该为真。

我知道一个解决方案:pickle模块记录引用的轨迹,并会记住我的X和Y列表完全相同(不仅仅是它们的内容,而是它们的引用)。

不过,使用pickle的问题在于,如果您将每个数据转储到单个文件中,它就会起作用。如果你有大量的数据,这不是很聪明。

你知道解决这个问题的另一种方法吗?

+0

从Python 2.6中存在的JSON模块,这可能满足你的需求。 – wvd 2012-04-05 13:56:47

+0

'使用pickle的问题在于,如果将每个数据转储到一个文件中,它就会起作用。如果你有大量的数据,这并不是很聪明。“你的数据有多大? – Simon 2012-04-05 15:25:26

回答

0

ZODB旨在保存持久的python对象和所有引用。只需从Persistent继承你的课程,并获得乐趣。 http://www.zodb.org/

2

要做的最简单的事情可能是将你希望保存在字典中的所有状态(可能是以变量名或其他一些唯一但可预测的标识符为关键字)进行包装,然后腌制并取消该字典。在字典中的对象将共享彼此之间的引用像你想:

>>> class X(object): 
...  # just some object to be pickled 
...  pass 
... 
>>> l1 = [X(), X(), X()] 
>>> l2 = [l1[0], X(), l1[2]] 
>>> state = {'l1': l1, 'l2': l2} 
>>> saved = pickle.dumps(state) 
>>> restored = pickle.loads(saved) 
>>> restored['l1'][0] is restored['l2'][0] 
True 
>>> restored['l1'][1] is restored['l2'][1] 
False