Python操作复制列表时原始输入列表意外被修改问题求助
问题产生原因
Python中的列表属于可变对象,nc = cells的赋值操作仅会给内存中已存在的cells列表对象新增一个别名nc,两个变量指向完全相同的内存地址。后续你对nc执行的增删元素、修改内层子列表数值等所有操作,本质都是直接操作原始输入的cells列表,因此会出现原列表被意外修改的问题。
如果只做nc = cells.copy()这类浅拷贝也无法解决问题:浅拷贝仅能复制最外层列表,内层的每一行子列表还是和原列表共享引用,修改内层元素依然会影响原输入。
解决办法
使用Python标准库copy提供的深拷贝(deepcopy)方法,完全递归复制嵌套列表的所有层级,生成和原列表完全独立的新对象:
- 先导入
copy模块 - 将原代码中
nc = cells替换为nc = copy.deepcopy(cells)
修改后的核心代码示例:
import copy def get_generation(cells, generations): # 深拷贝得到完全独立的新列表,后续操作不会影响原cells nc = copy.deepcopy(cells) rownum = len(nc) cellnum = len(nc[0]) # 后续原有逻辑保持不变即可 for gen in range(generations): tc = [] shouldadd = [] # 原代码的剩余迭代逻辑...
修改完成后所有对nc的操作都不会影响原始输入的cells列表,符合题目要求。
内容的提问来源于stack exchange,提问作者Mugitaba
相关产品推荐
相关产品推荐

