首页 > 解决方案 > 更改复制列表中的值比更改值更多

问题描述

我正在创建一个列表的副本,但是当稍后更改复制列表中的一个值时,它的变化超过了该值。

def NewField(h,c):         
    r = []
    r2 = []
    r3 = []
    for i in range(c):
        r2 += ["0"]
    for i in range(c):
        r3 += ["-"]

    for i in range(h):
        r += [r2]
    r += [r3]
    for i in range(h):
        r += [r2]  
    return r


test_field = NewField(3,4)

def NewMan(f,p,c):
    f1 = f[:]
    f1[c[0]-1][c[1]-1] = p
    return f1
NewMan(test_field,"8",[1,2])

我也试过 deepcopy()

标签: pythonlistcopy

解决方案


发生这种情况是因为子列表r2都是另一个的副本。尝试这个:

def NewField(h,c):         
    r = []
    r2 = []
    r3 = []
    for i in range(c):
        r2 += ["0"]
    for i in range(c):
        r3 += ["-"]

    for i in range(h):
        r += [r2[:]] # added [:]
    r += [r3]
    for i in range(h):
        r += [r2[:]] # added [:]
    return r

推荐阅读