我有一个向其中传递变量的函数。我不更改变量的名称。
我希望将函数内部的变量视为局部变量,但在某些情况下,它似乎实际上会更改函数外部具有相同名称的变量。我认为这不应该发生。有人经历过吗?
所以,我有这个:
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”。
有人会流血吗?
答案 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
,由于数据重复,因此可能会使用内存。