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

在Python函数中修改变量会影响函数外具有不同名称的变量,python,function,variables,global-variables,Python,Function,Variables,Global Variables,我有一个嵌套字典,其中包含许多不同对象上的一组数据(我指的是非编程意义上的对象)。字典的格式是allData[i][someDataType],其中i是我拥有数据的对象的编号,someDataType是与所讨论的对象关联的特定数据数组 现在,我定义了一个函数,它需要一个特定的数据数组来为每个对象执行计算。数据数组称为cleanfdfdf。所以我把它和它工作所需的一系列其他东西一起输入到我的函数中。我这样称呼它: rm.analyze4complexity(allData[i]['cleanFDF

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

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

rm.analyze4complexity(allData[i]['cleanFDF'], other data, other data, other data)
在函数本身内部,我立即将
cleanfdfdf
数据重新分配给另一个变量名,即
clFDF
。即最终结果是:

clFDF = allData[i]['cleanFDF']
然后,我必须将低于某个阈值的所有数据归零,例如:

clFDF[ clFDF < threshold ] = 0
然后运行该功能,然后使用“保存”数据更新
cleanfdfdf
条目:

allData[i].update( {'cleanFDF':saveFDF} )
但不知何故,只需在函数中执行clFDF[clFDFclFDF
saveFDF
allData[i]['cleanFDF']
,将同一数组索引中的所有实体归零!好像它们都是某种关联的全局变量,但我在任何地方都没有这样的声明


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

您正在通过引用传递
allData[i]['cleanfdfdf']
处的值(在)。对其所做的任何更改都将对其引用的对象进行更改,该对象仍然是与原始对象相同的对象,只是分配给了不同的变量


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

所有内容都是Python中的参考

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

example = list()
function(example)
print(example)
即使我没有直接更改变量“example”,它也会返回['yes']


请看,.

您可能需要对
clFDF=allData[i]['cleanfdfdf']
行进行“深度复制”,但我可能错了;更多信息请点击此处:。基本上,Python中的赋值工作方式与PHP中的赋值工作方式不同。Python中没有任何东西是通过引用传递的。除非你在没有充分理由的情况下使用非标准的引用传递定义。非常感谢-我会调查的!Yep-clFDF=copy.deepcopy(allData[i]['cleanfdfdf']),然后将clFDF传递给函数修复了我的问题。谢谢@德尔南说得有道理;在python中,它并不是完全按引用传递,但要点是相同的:无论您将对象分配给哪个变量,初始代码都使用完全相同的对象。为了能够更改对象,而不让更改反映在原始内容中,您需要一份副本:)谢谢-我将开始更深入地挖掘,现在我知道我在寻找什么了!
def function(y):
    y.append('yes')
    return y

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