Python中如何更优雅地创建多个相同列表的独立副本?
优化二维微分方程迭代变量初始化的一行代码写法
你需要初始化三个独立的列表变量(y_nm1、y_n、y_np1)作为微分方程迭代的历史值,且每个变量都是初始值y0的副本,避免引用关联。这里提供几种更优雅的一行写法:
方案1:生成器表达式解包
这是最简洁且内存高效的写法,通过生成器批量生成y0的副本,再一次性解包赋值给三个变量:
from copy import copy y_nm1, y_n, y_np1 = (copy(y0) for _ in range(3))
方案2:列表推导式解包
如果更习惯列表推导式的语法,也可以采用这种方式,逻辑与生成器表达式一致:
from copy import copy y_nm1, y_n, y_np1 = [copy(y0) for _ in range(3)]
关键注意事项
- 若
y0是嵌套列表(二维微分方程常见的结构,比如[[x1, y1], [x2, y2]]),浅拷贝copy()无法完全断开嵌套元素的引用关联,此时需要改用deepcopy():from copy import deepcopy y_nm1, y_n, y_np1 = (deepcopy(y0) for _ in range(3)) - 上述写法的核心优势是避免重复书写
copy(y0),当需要初始化更多同类变量时,只需修改range()的参数即可,扩展性更强。
内容的提问来源于stack exchange,提问作者Truls Henriksson
相关产品推荐
相关产品推荐

