Python嵌套列表调用.copy()后不同实例变量仍关联的问题求解
问题诱因
你遇到的是Python嵌套列表的浅拷贝特性导致的资源意外修改问题,具体逻辑如下:
- 列表自带的
.copy()方法、[:]切片操作、copy.copy()都属于浅拷贝,对于嵌套列表而言,仅会复制最外层的列表容器,内部嵌套的所有子列表仍和原列表的子列表指向同一块内存地址。 - 执行
currentlocation = lobby_art.copy()后,你修改currentlocation[userlocationY][1]的操作,本质上是在修改两个列表共享的子列表内容,因此硬编码的lobby_art里的礼物资源会被同步移除。 - 你之前调用copy模块未解决问题,是因为没有使用递归复制所有层级对象的深拷贝接口
copy.deepcopy()。
修复方案
方案1:使用深拷贝接口
导入copy模块,替换原有的拷贝逻辑即可实现两个列表的完全隔离:
import copy # 替换原来的 currentlocation = lobby_art.copy() currentlocation = copy.deepcopy(lobby_art)
方案2:手动复制子列表(无额外依赖)
通过列表推导式逐行复制子列表,也可以实现嵌套列表的完全隔离:
# 替换原来的 currentlocation = lobby_art.copy() currentlocation = [row.copy() for row in lobby_art]
内容的提问来源于stack exchange,提问作者Robert Hawaiian
相关产品推荐
相关产品推荐

