所以基本上我有一个名为 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()
也许这对你有帮助:
import copy
def diffuse(k, grid):
gridN = [[copy.copy(cell_obj) for cell_obj in line] for line in grid]
...
使用列表(网格),您可以创建内部列表的新列表。这些被存储为参考而不是值。当您尝试复制它们时,您还必须复制其他复杂对象并保存为引用。在这种情况下,您自己的细胞类别。
当列表或单元格对象保存在另一个外部列表中时,引用将被复制并指向相同的数据。所以你的价值观都改变了