You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python追加同一列表变量时所有元素同步变动的无库方案求问

问题根因

你遇到的是Python列表浅拷贝的典型问题:list.copy() 仅支持一层浅拷贝,你使用的二维列表中,外层列表执行copy()后得到的新对象仅外层是独立的,内层的每个子列表仍然和原列表的子列表指向同一块内存地址。你最初直接将poss的引用存入boom,后续追加的浅拷贝对象也共用内层子列表,因此修改poss的内层元素时,boom里所有历史元素都会同步变更。

无库解决方案

不用导入copy库也可以手动实现二维列表的深拷贝,每次存储状态时遍历外层列表,给每一行子列表单独做拷贝,再将新生成的外层列表存入boom即可,写法如下:

[row.copy() for row in poss]
修改后的可运行代码
poss= [
['*', 'j', '*', '*', '*'],
['*', '*', '*', '*', '*']
]
# 首次存入时做二维深拷贝
boom = [[row.copy() for row in poss]]
#first change
poss[0][1],poss[1][3] = poss[1][3] , poss[0][1]
#first print works well shows correct change
print("First Generation:")
for boomite in boom:
  print(boomite)
  print("\n")
poss[1][3],poss[0][0] = poss[0][0] , poss[1][3]
# 追加时也做二维深拷贝
boom.append([row.copy() for row in poss])
print("First and Second Generation:")
for boomite in boom:
  print(boomite)
  print("\n")

修改后两次打印的状态会完全独立,后续对poss的修改不会影响已经存入boom的历史记录。

内容的提问来源于stack exchange,提问作者YasindeOfDulian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:06:04