我正在尝试编写可以以二维数组的形式构建某种可编辑世界地图的代码:
class map(object):
def __init__(self, width, height):
self.__height = height
self.__width = width
self.__grid = []
row = []
for num in range(0, self.__width):
row.append(".")
for num in range(0, self.__height):
self.__grid.append(row)
print(self.__grid)
def drawCell(self, X, Y, symbol):
self.__grid[Y-1][X-1] = symbol
print(self.__grid)
world = map(6, 4)
world.drawCell(3, 2, "0")
当我运行它时,它似乎不是编辑单元格 (3, 2),而是在每一行中执行第三个单元格。奇怪的是,当我将init () 更改为此...
def __init__(self, width, height):
self.__height = height
self.__width = width
self.__grid = [['.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.']]
...因此init跳过了网格的构建,它完美地工作!看起来它正在附加变量“row”而不是它包含的值,因此它编辑了“row”的每个实例。
当然,上面的这个解决方案不允许改变地图大小。所以我的问题是:有没有一种非冗余的方法来解决这个问题?
编辑:你不需要解释为什么会这样,我已经解释过了。我想象当我做这个时它附加了值,而不是包含它的变量。