[英]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'脚本中的clFDF
, saveFDF
和allData[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.