Python中执行result.append(sum(array))为何会同步修改array数组
核心原因
Python 中对列表这类可变对象赋值时,默认是绑定对象引用而非拷贝值,你代码里的array = result = signature写法,相当于把array和result两个变量都指向了内存里的同一个列表对象。因此你不管通过哪个变量调用append、del等修改方法,操作的都是同一个列表,自然会出现改result同时影响array的现象。
修复方案
如果需要两个独立的列表,初始化时要对原始的signature做值拷贝,常见的拷贝写法有两种:
- 调用列表的
copy()方法 - 用全切片语法
[:]生成新列表
按照你的需求(result存储最终结果,array做中间计算),修改初始化代码即可:
def some_function(signature, n): # 分开拷贝,两个变量指向不同的列表对象 result = signature.copy() array = signature.copy() count = 1 while count <= n: print(array) result.append(sum(array)) print(array) array.append(sum(array)) print(array) del array[0] count += 1 return result print(some_function([1, 1, 1], 10))
修改后调用result.append就只会修改result本身,不会再影响array的内容。
内容的提问来源于stack exchange,提问作者mackotron
相关产品推荐
相关产品推荐

