2017-07-15 57 views
1

見下面的例子:爲什麼功能可以改變外部的物體?

def func(arg): 
    print(id(arg)) 
    df = pd.DataFrame(arg) 
    print(id(df)) 
    df['b'] = [4,5,6] 

a = pd.DataFrame({'a' : [1,2,3]}) 

print(a, id(a)) 

func(a) 

print(a) 
    a 
0 1 
1 2 
2 3 
681924702104 
681924702104 
681924718944 
    a b 
0 1 4 
1 2 5 
2 3 6 

爲什麼調用函數後改變?我不明白,特別是因爲他們有所有不同的ID。解決這個問題的正確方法是什麼?

+0

'df = pd.DataFrame(arg); df ['b'] = [4,5,6]'修改'arg'?我對那個班不熟悉。 – Carcigenicate

+0

不確定,但是1:您創建了一個新的'DataFrame'對象,但似乎修改了原始數據。 –

回答

2

pd.DataFrame()需要一個參數來指定是否應該複製數據。默認值是False。如果您想要一個副本,請將其設置爲True

df = pd.DataFrame(arg, copy=True) 

這將修復您的示例。

+0

或'df = a.copy()'。 – hpaulj

+0

但是,由於a和df有不同的身份(因此根據[link](https://docs.python.org/2/library/functions.html#id)它們是不同的對象),怎麼可能改變一個將列'b'添加到df? – JohnnyS

相關問題