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

为何使用list()无法创建新列表?嵌套列表复制异常问题

问题原因:浅拷贝的局限性

你遇到的问题是因为list(route)执行的是浅拷贝操作。route是嵌套列表(列表元素本身也是列表),浅拷贝只会复制外层列表的结构,但里面的每个子列表并没有被真正复制——新的copyRoute里的元素只是原route中子列表的引用,两者指向同一个内存地址的子列表对象。所以当你修改route[0][0]时,本质是修改了那个子列表里的元素,copyRoute因为引用同一个子列表,自然也会同步变化。

解决方案

下面是几种可行的深拷贝方式,能彻底复制嵌套列表的所有内容:

方法1:列表推导式 + 子列表拷贝

直接遍历原列表的每个子列表,单独拷贝每个子列表:

from random import randint

def createRoute():
    route = []
    for horizon in range(8):
        row = []
        for vertical in range(4):
            row.append(randint(0, 50))
        route.append(row)
    return route

def printRoute(list):
    for i in range(8):
        for j in range(4):
            print("%3d" % list[i][j], end=" ")
        print()  # 添加换行让输出更清晰

def main():
    route = createRoute()
    # 用列表推导式拷贝每个子列表
    copyRoute = [row.copy() for row in route]
    route[0][0] = 250
    print("原route:")
    printRoute(route)
    print("拷贝后的copyRoute:")
    printRoute(copyRoute)

main()

方法2:使用copy模块的deepcopy

如果嵌套结构更复杂(比如多层嵌套),推荐使用copy模块的deepcopy方法,它会递归复制所有层级的对象:

from random import randint
import copy

def createRoute():
    route = []
    for horizon in range(8):
        row = []
        for vertical in range(4):
            row.append(randint(0, 50))
        route.append(row)
    return route

def printRoute(list):
    for i in range(8):
        for j in range(4):
            print("%3d" % list[i][j], end=" ")
        print()

def main():
    route = createRoute()
    copyRoute = copy.deepcopy(route)
    route[0][0] = 250
    print("原route:")
    printRoute(route)
    print("拷贝后的copyRoute:")
    printRoute(copyRoute)

main()

方法3:用切片拷贝子列表

和方法1原理类似,用切片row[:]创建子列表的拷贝:

copyRoute = [row[:] for row in route]

这几种方法都能让copyRoute成为独立于原route的新列表,修改其中一个不会影响另一个。

内容的提问来源于stack exchange,提问作者NinjaCoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:50:26