Python嵌套列表操作类调用restart方法无法还原初始值问题
问题根因
- Python自带的
list.copy()属于浅拷贝:仅复制外层列表的容器结构,内层嵌套的子列表仍然和原列表共享同一内存地址 - 你修改
self.__a_list[2][2]时,本质是修改了公共的子列表对象,备份的self.__reset_list里的对应位置也会同步被修改,自然无法恢复初始状态 - 原
restart()方法直接把操作列表指向备份的引用,后续修改操作列表时还是会改动备份内容
修复代码
需要用copy模块的深拷贝方法deepcopy,完全隔离操作列表和备份列表:
import copy class Sample: def __init__(self, a_list, count=0): self.__count = 0 # 操作列表做深拷贝,避免修改外部传入的原始列表 self.__a_list = copy.deepcopy(a_list) # 备份也做深拷贝,和操作列表完全隔离 self.__reset_list = copy.deepcopy(a_list) def set_update(self): self.__a_list[2][2] = "S" def restart(self): # 恢复时也做深拷贝,避免后续操作修改备份本身 self.__a_list = copy.deepcopy(self.__reset_list) def __str__(self): result_list = self.__a_list result = '' for i in range(len(result_list)): for j in range(len(result_list[i])): result += result_list[i][j] + ' ' if i < len(result_list) -1: result += '\n' return result
原有测试用例无需修改,运行后第三次打印的就是初始列表,符合预期。
内容的提问来源于stack exchange,提问作者jwan218
相关产品推荐
相关产品推荐

