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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:54:02