Python函数无return语句却修改外部数组参数的问题咨询
现象原因
这是Python的参数传递规则与可变对象的特性共同导致的正常语言行为:
- Python的函数参数传递的是对象的内存引用,你把外部的
valueArray传入函数时,函数内部的形参valArray和外部的实参valueArray指向内存中完全相同的数组对象,不会自动生成独立的副本。 - 你所用的多维数组(从索引写法判断为NumPy数组)属于可变对象,支持直接修改对象内部的元素值。你在函数中执行
valArray[x,y] = optionValue操作时,就是直接修改了公共数组对象的内部存储值,因此函数外部的valueArray会同步发生变化,不需要return语句也不需要声明全局变量。
避免修改原数组的方案
如果你的需求是不改动原始数组,只在新的副本上做修改,可以选择以下两种方案:
方案1:调用函数时传入数组副本
updateValueArray(valueArray.copy(), posabilityArray)
方案2:函数内部先拷贝再修改,最后返回新数组
def updateValueArray(valArray, posArray): # 生成与原数组完全独立的拷贝 processed_val = valArray.copy() for x in range(9): for y in range(9): options = 0 optionValue = 0 for i in range(9): if posArray[x,y,i]: options+=1 optionValue = i+1 if options == 1: processed_val[x,y] = optionValue # 返回修改后的新数组 return processed_val # 调用时用新变量接收返回结果 new_value_arr = updateValueArray(valueArray, posabilityArray)
内容的提问来源于stack exchange,提问作者Jonatan Kaare - Rasmussen
相关产品推荐
相关产品推荐

