當我dg = df.copy()在 Pandas 資料幀中時,我知道我有兩個資料幀,其中 dg 是 df 的副本。但是對于df = df.copy(),新的 df 會覆寫舊的 df 嗎?我的意思是在 RAM 中df = df.copy()我有多少個資料幀?
uj5u.com熱心網友回復:
來自官方 Pandas檔案
DataFrame.copy(深=真)
復制此物件的索引和資料。
當
deep=True(默認)時,將使用呼叫物件的資料和索引的副本創建一個新物件。對副本的資料或索引的修改不會反映在原始物件中(請參閱下面的注釋)。當 時
deep=False,將在不復制呼叫物件的資料或索引的情況下創建新物件(僅復制對資料和索引的參考)。對原始資料的任何更改都將反映在淺拷貝中(反之亦然)。
因此,當您擁有 時df = df.copy(),您只是將df物件分配給df變數名稱,因此在功能上沒有任何變化。它已被覆寫,但保持不變。所以你仍然只能df在記憶體中存盤一個物件。
uj5u.com熱心網友回復:
但是對于 df = df.copy(),新的 df 會覆寫舊的 df 嗎?我的意思是在 df = df.copy() 的 RAM 中我有多少個資料幀?
這不是關于 Pandas 或 DataFrame 類的問題。這是一個關于=Python 中運算子的問題。
df.copy()創建一個新物件,它恰好是 DataFrame 類的一個新實體。這就是你所需要知道的。(您必須知道這一點,因為函式可以回傳已經存在的物件。)無論您撰寫還是撰寫,它都會以完全相同的方式執行此操作- 這可能無關緊要,因為該方法無法知道分配甚至會發生。dg = df.copy()df = df.copy()
賦值使名稱指向某個特定物件。就是這樣。dg = df.copy()意思是“當您從 中取回物件時df.copy(),讓我們dg為該物件命名”。df = df.copy()意思是“當您從 中取回物件時df.copy(),讓df(不再是它之前命名的名稱的名稱,并且)成為該物件的名稱”。
物件只要有名字就一直存在。
當你寫的時候dg = df.copy(),這個df名字仍然是原來的名字DataFrame,所以現在你的DataFrames記憶里一定有兩個。
當你寫的時候df = df.copy(),這個df名字不再是那個原件的名字DataFrame,因為它被改成了新名字的名字。所以現在舊的可能還在也可能不在記憶中。
如果它有任何其他名稱(或其他參考 - 例如,作為某處串列的元素),它肯定仍會在記憶體中。
在參考實作中,如果這是物件的最后一個剩余名稱,它將被釋放。發生這種情況是因為參考實作使用基于參考計數的垃圾收集。其他實作(例如 Jython)可能不會這樣做;他們可以使用任何型別的垃圾收集技術。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/381300.html
上一篇:使用2個按列分組的情況下,如何按每個分組按列進行小計?
下一篇:從資料時間列中提取學期
