我的问题基本上是 dataframe.copy() 使用写时复制吗?
我猜测(我可能是错的)当有人调用 dataframe.copy() 时,它会在某处调用 malloc 来为新数据帧分配虚拟内存。我相信 malloc 不会初始化虚拟内存,因此它是写时复制并且不会发生物理数据移动。这意味着调用 copy() 时没有数据帧的真正副本。
但是,调用 dataframe.copy() 确实需要时间并增加我的内存占用。所以看起来它确实正在制作数据的物理副本。我的推理哪里错了?
最佳答案
使用默认的deep=True
,它肯定会分配新的内存,但它也会立即复制数据。所以内存占用会立即增加。它不会对 .copy(deep=True)
或 .copy(deep=False)
执行写入时复制。当您执行deep=False时,两个DataFrame将使用相同的数据,当您执行deep=True时,数据将被复制。仅当您分配了内存并且从未在其中放置任何内容时,Malloc 不初始化新内存的情况才与此相关。
列只是由 numpy ndarray 支持的 Series 对象。而且它们不进行写时复制(请参阅 NumPy Array Copy-On-Write )。
关于pandas - Pandas 数据框复制有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62290594/