Python函数调用时意外修改外部列表变量的原因是什么?
问题解答
该现象完全符合Python的运行逻辑,你存在的疏漏是没有正确完成列表的复制操作。
原因说明
Python中的变量存储的是对象的内存引用,列表属于可变对象,执行tempList = listToDouble时,并没有生成新的列表实体,只是让tempList和传入的listToDouble(也就是外部的mainList)指向了内存中同一个列表对象。后续对tempList的元素赋值操作,本质就是修改这个共享的列表,所以外部的mainList也会同步变化。
解决方案
你需要先创建原列表的独立拷贝,再对拷贝做修改。对当前存储基础数据类型的一维列表,用任意浅拷贝方式即可:
- 切片拷贝:
tempList = listToDouble[:] - list构造器拷贝:
tempList = list(listToDouble) - copy模块浅拷贝:导入
copy模块后执行tempList = copy.copy(listToDouble)
如果后续你需要处理嵌套可变元素的列表(比如列表内部还有子列表),则需要用copy.deepcopy()做深拷贝。
修改后的可运行代码
def DoubleList(listToDouble): # 先创建原列表的独立拷贝 tempList = listToDouble[:] for i in range(4): tempList[i] *= 2 return tempList mainList = [100, 100, 32, 32] print('List =', mainList) # 输出 [100, 100, 32, 32] doubledList = DoubleList(mainList) print('Doubled list =', doubledList) # 输出 [200, 200, 64, 64] print('Final List =', mainList) # 输出 [100, 100, 32, 32]
内容的提问来源于stack exchange,提问作者Resistnz
相关产品推荐
相关产品推荐

