【问题标题】:Local variable get changed unintentionally in Python局部变量在 Python 中被无意更改
【发布时间】:2019-04-23 07:58:36
【问题描述】:

我有一个 pandas 数据框“df”,我在其上应用了几个函数。 我不想更改原始数据框的值。 我所有的功能都是这样的:

def func(x):
# do some stuff with x
return x

 y = func(x=df)

我没有在函数中引用 df 变量。但是变量无论如何都会改变。有人可以向我解释为什么会这样以及如何避免吗?

【问题讨论】:

  • Python 是通过引用传递的。 df 是可变的。您将对 df 的引用传递给正在对其进行变异的方法。如果您想保留原件,请发送一份df
  • @rdas Python 不是按引用传递的。 Python 使用称为call by sharing 的评估策略。这不是一个众所周知的名字,它有时被称为“赋值调用”,或者如果在 Java 社区中,“所有值都是引用的值调用”。不管你想怎么称呼它,它都是not call-by-reference。此处引用调用的显着特点是调用者可以看到对参数的赋值,这在Python中不会发生

标签: python pandas function dataframe variables


【解决方案1】:

发送数据帧的深拷贝

y = func(x=df.copy())

默认情况下是深拷贝。

【讨论】:

  • 这会传入一个浅拷贝,可能就够了:)
  • @Mars 不会根据documentation 会。它说deep default is True
  • 好收获!我忘了这是一个熊猫数据框。 Python 的 copy() 默认是浅的。哎呀!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 2021-10-17
  • 2014-10-21
相关资源
最近更新 更多