Python滑动窗口代码中未关联两列表莫名同步更新问题排查
问题根源
这是Python可变对象的引用机制导致的:
- 列表属于可变对象,你执行
result.append(window)时,并没有把window当前的内容复制一份存入result,只是把window的内存引用地址追加到了result里 - 后续你修改
window(比如执行append操作)时,所有指向这个内存地址的引用都会同步读到最新的内容,也就是你看到的result在你没有直接操作的情况下也被更新的现象 - 循环结束后,
result里存的所有元素都是同一个window对象的引用,所以最终输出的所有子数组完全相同,都是window最后一次更新后的内容
修复方案
往result里追加内容时,创建window当前状态的副本即可,可选写法:
# 写法1:用copy方法 result.append(window.copy()) # 写法2:用切片语法 result.append(window[:]) # 写法3:用list构造函数 result.append(list(window))
修改后可正常运行的代码
def find_subarrays(arr, target): result = [] start = 0 window = [] product = 1 print("target", target) for end in range(len(arr)): print("check Result", result) print("arr[end]", arr[end]) window.append(arr[end]) print("check Result 2", result, "hmm",window) print("firstR ", result) result.append(window.copy()) print("secondR ", result) return result find_subarrays([2, 5, 3, 10], 30)
内容的提问来源于stack exchange,提问作者Os-
相关产品推荐
相关产品推荐

