Python:变量复制中无法解释的情况

2024-05-29 09:32:45 发布

您现在位置:Python中文网/ 问答频道 /正文

给定以下程序,我希望变量bar保持不变

def foo(bar):
    bar2 = bar[:]
    chg = []
    for p in range(4):
        for q in range(3):
            chg.append([p,q])
    for [x,y] in chg:
        bar2[x][y] = "xx"
    return bar2

def printGrid(grid):
    for row in grid:
        print " ".join(row)    
    print

bar = [[str(i) + str(j) for i in range(5)] for j in range(6)]
printGrid(bar)
printGrid(foo(bar))
printGrid(bar)

但是,这是输出:

00 10 20 30 40
01 11 21 31 41
02 12 22 32 42
03 13 23 33 43
04 14 24 34 44
05 15 25 35 45

xx xx xx 30 40
xx xx xx 31 41
xx xx xx 32 42
xx xx xx 33 43
04 14 24 34 44
05 15 25 35 45

xx xx xx 30 40
xx xx xx 31 41
xx xx xx 32 42
xx xx xx 33 43
04 14 24 34 44
05 15 25 35 45

我不明白。前两个网格和预期的一样,但是bar什么时候改变的?我怎样才能防止这种情况发生


Tags: in程序forfoodefbarrangegrid
1条回答
网友
1楼 · 发布于 2024-05-29 09:32:45

bar是指针列表。您正在用bar2 = bar[:]复制那些指针。但是,除非您更改这些指针,否则它们仍然指向相同的列表,因此bar[x][y]bar2[x][y]引用相同的数据。尝试使用

bar2 = copy.deepcopy(bar)

而不是

bar2 = bar[:]

你需要import copy

相关问题 更多 >

    热门问题