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

2024-06-06 09:53:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

现在,我定义了一个函数,它需要为每个对象执行计算所需的特定数据数组。数据数组称为cleanFDF。所以我把这些输入到我的函数中,以及它工作所需的其他一些东西。我这样称呼它:

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

在函数本身内部,我直接将cleanFDF数据重新分配给另一个变量名,即clFDF。一、 e.最终结果是:

^{pr2}$

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

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'脚本中修改clFDFsaveFDF和{},将同一数组索引中的所有实体归零!好像它们都是关联的全局变量,但我在任何地方都没有这样的声明。。。在

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


Tags: 数据对象函数脚本datathreshold字典条目
2条回答

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

对数据进行深度复制可能会解决您的问题(Python有一个deepcopy库,应该可以做到这一点;)。在

在Python中,一切都是一个引用。在

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

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

它将返回['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。在

相关问题 更多 >