作业何时在 Python 中进行深拷贝?
When does an assignment do a deep copy in Python?
我有以下代码:
import pandas as pd
store = pd.HDFStore('cache.h5')
data = store['data']
在这种情况下,data
是 HDF5 数据的深度内存副本,还是指向磁盘上原始数据的指针?
它是一个 "in memory object",不会自动反映(刷新)到磁盘。
演示:
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])
从磁盘(HDF 存储)读取到 DataFrame(内存中的对象):
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
更新: 下面的小演示显示 data
DF 在从 HDF 存储读取后不依赖于 store
:
In [26]: store.close()
In [27]: store = pd.HDFStore(fn)
In [28]: del data
In [29]: data = store['test']
让我们删除 store
对象
In [30]: del store
data
还在
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
我有以下代码:
import pandas as pd
store = pd.HDFStore('cache.h5')
data = store['data']
在这种情况下,data
是 HDF5 数据的深度内存副本,还是指向磁盘上原始数据的指针?
它是一个 "in memory object",不会自动反映(刷新)到磁盘。
演示:
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])
从磁盘(HDF 存储)读取到 DataFrame(内存中的对象):
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
更新: 下面的小演示显示 data
DF 在从 HDF 存储读取后不依赖于 store
:
In [26]: store.close()
In [27]: store = pd.HDFStore(fn)
In [28]: del data
In [29]: data = store['test']
让我们删除 store
对象
In [30]: del store
data
还在
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