gpt4 book ai didi

python - 修改 Python 函数中的变量会影响函数外部具有不同名称的变量

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:29 24 4
gpt4 key购买 nike

我有一个嵌套字典,其中包含关于许多不同对象的一堆数据(我指的是非编程意义上的对象)。字典的格式是 allData[i][someDataType],其中 i 是我拥有数据的对象的编号标识,someDataType 是与相关对象关联的特定数据数组。

现在,我定义了一个函数,它需要一个特定的数据数组来为每个对象执行计算。数据数组称为 cleanFDF。所以我把它连同它工作所需的其他一些东西一起提供给我的功能。我这样调用它:

rm.analyze4complexity(allData[i]['cleanFDF'], other data, other data, other data)

在函数内部,我立即将 cleanFDF 数据重新分配给另一个变量名,即 clFDF。 IE。最终结果是:

clFDF = allData[i]['cleanFDF']

然后我必须将低于某个阈值的所有数据归零,这样:

clFDF[ clFDF < threshold ] = 0

好的 - 该功能按预期运行。但是现在当我尝试在主脚本中绘制原始的 cleanFDF 数据时,在 clFDF 中清零的条目也在 allData[i]['cleanFDF'] 中清零。什么鬼?显然这里发生了一些我不明白的事情。

为了让事情变得更奇怪(从我的角度来看),我试图通过在调用函数之前将数组“保存”到另一个变量来解决这个问题。 IE。我愿意

saveFDF = allData[i]['cleanFDF']

然后运行该函数,然后用“已保存”的数据更新 cleanFDF 条目:

allData[i].update( {'cleanFDF':saveFDF} )

但不知何故,只需在函数内执行 clFDF[ clFDF < threshold ] = 0 即可修改 clFDFsaveFDFallData[i]['cleanFDF' ] 在主要的 friggin' 脚本中,将相同数组索引处的所有整体归零!就好像它们都是以某种方式关联的全局变量,但我在任何地方都没有做出这样的声明......

我是一个无可救药的 Python 新手,所以毫无疑问我不了解它的工作原理。任何帮助将不胜感激!

最佳答案

您正在 allData[i]['cleanFDF'] 通过引用 传递值(在 https://stackoverflow.com/a/430958/337678 有很好的解释)。对它所做的任何更改都会对它所引用的对象进行更改,该对象仍然与原始对象相同,只是分配给了不同的变量。

对数据进行深拷贝可能会解决您的问题(Python 有一个深拷贝库可以解决问题;))。

关于python - 修改 Python 函数中的变量会影响函数外部具有不同名称的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14118212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com