2016-12-03 10 views
2

Ich habe den folgenden Code:Wann führt eine Zuweisung eine tiefe Kopie in Python durch?

import pandas as pd 
store = pd.HDFStore('cache.h5') 
data = store['data'] 

In diesem Fall data ist eine tiefe, in Speicherkopie der HDF5 Daten, oder ist es ein Zeiger auf die Originaldaten auf der Festplatte?

+0

Was genau meinen Sie mit * Zeiger auf die Originaldaten auf der Festplatte *? – Tobias

Antwort

1

Es handelt sich um ein "im Speicherobjekt", das nicht automatisch auf die Festplatte gespiegelt wird.

Demo:

In [16]: fn = r'D:\temp\.data\test.h5' 

In [17]: store = pd.HDFStore(fn) 

In [18]: store 
Out[18]: 
<class 'pandas.io.pytables.HDFStore'> 
File path: D:\temp\.data\test.h5 
/df2    frame_table (typ->appendable,nrows->7,ncols->4,indexers->[index],dc->[Col1,Col2,Col3,Col4]) 
/test   frame_table (typ->appendable,nrows->7,ncols->4,indexers->[index],dc->[Col1,Col2,Col3,Col4]) 

von der Festplatte zu lesen (HDF Store) in Datenrahmen (Objekt im Speicher):

In [19]: data = store['test'] 

In [20]: data 
Out[20]: 
     Col1  Col2 Col3 Col4 
0  what  the  0  0 
1  are curves  1  8 
2  men  of  2 16 
3   to  your  3 24 
4  rocks  lips  4 32 
5  and rewrite  5 40 
6 mountains history.  6 48 

In [21]: data.Col4 = 1000 

In [22]: data 
Out[22]: 
     Col1  Col2 Col3 Col4 
0  what  the  0 1000 
1  are curves  1 1000 
2  men  of  2 1000 
3   to  your  3 1000 
4  rocks  lips  4 1000 
5  and rewrite  5 1000 
6 mountains history.  6 1000 

In [23]: store.close() 

In [24]: store = pd.HDFStore(fn) 

In [25]: store['test'] 
Out[25]: 
     Col1  Col2 Col3 Col4 
0  what  the  0  0 
1  are curves  1  8 
2  men  of  2 16 
3   to  your  3 24 
4  rocks  lips  4 32 
5  and rewrite  5 40 
6 mountains history.  6 48 

UPDATE: die folgende kleine Demo zeigt, dass der data DF nicht hängen von store ab, nachdem es von HDF-Speicher gelesen worden ist:

In [26]: store.close() 

In [27]: store = pd.HDFStore(fn) 

In [28]: del data 

In [29]: data = store['test'] 

wir store Objekt

In [30]: del store 

data noch löschen ist es

In [31]: data 
Out[31]: 
     Col1  Col2 Col3 Col4 
0  what  the  0  0 
1  are curves  1  8 
2  men  of  2 16 
3   to  your  3 24 
4  rocks  lips  4 32 
5  and rewrite  5 40 
6 mountains history.  6 48 
+0

Bedeutet das, dass es eine tiefe Kopie ist? Wenn ich von 'Daten' lese, lese ich jetzt aus dem RAM oder von der Festplatte? – cjm2671

+0

Ja, Sie können "Daten" als eine tiefe Kopie einer Tabelle im HDF-Speicher betrachten. Grundsätzlich ist es ein DataFrame (Objekt im Speicher), wobei 'cache.h5' - eine HDF (h5) Datei (auf Platte) ist, die mehrere Tabellen (DataFrames) enthalten kann. – MaxU

+0

Danke, das ist sehr hilfreich! – cjm2671

Verwandte Themen