Python函数内存出血

时间:2018-06-28 11:12:36

标签: python pandas

我有一个向其中传递变量的函数。我不更改变量的名称。

我希望将函数内部的变量视为局部变量,但在某些情况下,它似乎实际上会更改函数外部具有相同名称的变量。我认为这不应该发生。有人经历过吗?

所以,我有这个:

def(df1,df2,df3)

    df1.set_index('A',inplace=True)

    df2['c'] = df1['B'] * df3['G']

    return df2

我发现df1.set_index('A',inplace=True)正在函数外更改df1。因此,当我再次调用该函数时,由于该函数未在df1中“看到” df1 ['A']而导致错误。它将df1从“外部”传递过来,因为它已经在较早的调用中将索引设置为“ A”。

有人会流血吗?

1 个答案:

答案 0 :(得分:2)

在Python函数中,参数值是通过赋值传递的(传入的参数实际上是对对象的引用,但是引用是通过值传递的),因此,如果您修改{{1} },您正在修改在函数中作为参数传递的数据框。

您可能要使用copy

df1

注意:默认情况下,复制功能的 def func(df1,df2,df3): df1 = df1.copy() df1.set_index('A',inplace=True) df2['c'] = df1['B'] * df3['G'] return df3 参数为deep,由于数据重复,因此可能会使用内存。