2012-04-05 54 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