繁体   English   中英

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

[英]Modifying variables in Python function is affecting variables with different names outside the function

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

现在,我有一个我定义的函数,它需要一个特定的数据数组来为每个对象执行计算。 数据数组称为cleanFDF 所以我把这个提供给我的功能,以及它需要工作的一堆其他东西。 我称之为:

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

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

clFDF = allData[i]['cleanFDF']

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

clFDF[ clFDF < threshold ] = 0

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

为了使事情变得更奇怪(从我的观点来看),我试图通过在调用函数之前将数组“保存”到另一个变量来做一个笨拙的kludge来解决这个问题。 就是我

saveFDF = allData[i]['cleanFDF']

然后运行该函数,然后用'saved'数据更新cleanFDF条目:

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

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

我是一个绝望的Python新手,所以毫无疑问我不理解它是如何工作的。 任何帮助将不胜感激!

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

制作数据的深层副本可能会解决您的问题(Python有一个深层复制库,应该可以解决这个问题;))。

一切都是Python的参考。

def function(y):
    y.append('yes')
    return y

example = list()
function(example)
print(example)

它会返回['yes'],即使我没有直接更改变量'example'。

请参阅为什么list.append评估为false? Python追加()与列表中的+运算符,为什么这些会给出不同的结果? Python列出追加返回值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM