You need to enable JavaScript to run this app. Python数组引用赋值后执行append导致原数组意外修改的问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 12:36:01