作业何时在 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