Python数组引用赋值后执行append导致原数组意外修改的问题咨询
问题根因
这个行为的差异来自Python对可变对象的基础赋值逻辑:
写array2 = array的直接赋值,不会创建独立的数组副本,只会让array2这个变量名,和array共同指向内存里的同一个列表实体。后续对array2执行append修改,本质是在操作两个变量共享的同一份数据,原数组自然会被同步改动,最终形成每轮循环输出长度持续累加的结果。
修复方案
只需要在给array2赋值时,显式生成数组的独立浅拷贝,让两个变量指向完全分离的列表实体,就能实现不修改原数组的预期。常用的浅拷贝实现方式包括:
- 列表全量切片:
array2 = array[:] - 列表自带的拷贝方法:
array2 = array.copy() - 内置
list()构造器生成新列表:array2 = list(array)
修正后的可运行代码
array = [1] x = range(5) for i in x: # 替换原有直接赋值逻辑,生成独立副本 array2 = array.copy() array2.append(1) print(array2)
运行上述代码的输出会和你期望完全匹配:每轮循环都会基于原始数组生成独立副本,追加元素后固定输出[1, 1],全程不会改动原数组的内容。
补充说明:如果原数组是包含嵌套结构的多维列表,上述浅拷贝仅会复制最外层的列表实体,内层嵌套的可变对象依然会被两个列表共享,这类场景需要使用深拷贝逻辑完成全量独立复制。
内容的提问来源于stack exchange,提问作者SebastiaanTheCoder
相关产品推荐
相关产品推荐

