我有一个嵌套字典,它包含了许多不同对象的数据(我指的是非编程意义上的object)。字典的格式是allData[i][someDataType],其中i是我有数据的对象的数字标识,someDataType是与相关对象关联的特定数据数组。在
现在,我定义了一个函数,它需要为每个对象执行计算所需的特定数据数组。数据数组称为cleanFDF
。所以我把这些输入到我的函数中,以及它工作所需的其他一些东西。我这样称呼它:
rm.analyze4complexity(allData[i]['cleanFDF'], other data, other data, other data)
在函数本身内部,我直接将cleanFDF
数据重新分配给另一个变量名,即clFDF
。一、 e.最终结果是:
然后,我必须将低于某个阈值的所有数据归零,例如:
clFDF[ clFDF < threshold ] = 0
好的-函数按预期工作。但是现在当我试图在主脚本中绘制原始cleanFDF数据时,在clFDF中被清零的条目也在allData[i]['cleanFDF']
中被清零。世界跆拳道联盟?显然这里发生了一些我不明白的事情。在
为了让事情变得更奇怪(从我的角度来看),我尝试了一个body kludge来解决这个问题,方法是在调用函数之前将数组“保存”到另一个变量中。一、 我知道
saveFDF = allData[i]['cleanFDF']
然后运行函数,然后用“已保存”数据更新cleanFDF
条目:
allData[i].update( {'cleanFDF':saveFDF} )
但不知何故,只要在函数中执行clFDF[clFDF<;threshold]=0,就会在主friggin'脚本中修改clFDF
、saveFDF
和{
我是一个绝望的Python新手,所以毫无疑问,我不了解它是如何工作的。任何帮助将不胜感激!在
您正在通过引用传递位于
allData[i]['cleanFDF']
的值(在https://stackoverflow.com/a/430958/337678处有很好的解释)。对它所做的任何更改都将对它所引用的对象进行,该对象仍然是与原始对象相同的对象,只是分配给了不同的变量。在对数据进行深度复制可能会解决您的问题(Python有一个deepcopy库,应该可以做到这一点;)。在
在Python中,一切都是一个引用。在
它将返回['yes'],即使我没有直接更改变量'example'。在
见Why does list.append evaluate to false?,Python append() vs. + operator on lists, why do these give different results?,Python lists append return value。在
相关问题 更多 >
编程相关推荐