Python。我不明白为什么更改一个二维数组会影响另一个数组

问题描述 投票:0回答:1

所以基本上我有一个名为 grid 的主二维数组,其中填充了单元格对象,并且我创建了一个名为 gridN 的数组的克隆以供以后使用,但是当我将所有 gridN 的密度设置为 0 时,主网格的密度也设置为 0 。 可以看到这一点,因为最后几行的打印返回 0。

class cell:
    x = 0
    y = 0

    den = 0

    velX = 0
    velY = 0

width = 10
height = 10
grid = []


for i in range(width):
    grid.append([])
    for j in range(height):
        grid[i].append(cell())
        grid[i][j].x = i
        grid[i][j].y = j


def diffuse(k,grid):
    gridN = list(grid)
    
    for i in range(width):
        gridN.append([])
        for j in range(height):
            gridN[i].append(cell())
            gridN[i][j].den = 0
    print(gridN[0][0].den)
    
grid[0][0].den = 100
diffuse(0.5,grid)

我尝试添加一些东西来阻止两个数组访问相同的内存,例如:

list()
[:]
.copy()

python arrays class object grid
1个回答
0
投票

也许这对你有帮助:

import copy

def diffuse(k, grid):
    gridN = [[copy.copy(cell_obj) for cell_obj in line] for line in grid]
    ...

使用列表(网格),您可以创建内部列表的新列表。这些被存储为参考而不是值。当您尝试复制它们时,您还必须复制其他复杂对象并保存为引用。在这种情况下,您自己的细胞类别。

当列表或单元格对象保存在另一个外部列表中时,引用将被复制并指向相同的数据。所以你的价值观都改变了

© www.soinside.com 2019 - 2024. All rights reserved.