Python 没有像我预期的那样遍历 range() 列表

Python is not iterating through range() list as I expected

我还在学习Python的来龙去脉,遇到了绊脚石

我正在尝试创建一个 n^2 大小的对象网格,以保存与其在网格上的 (x,y) 坐标相对应的数据,但是当我尝试将网格作为二维数组进行迭代时,它不知何故只需为所有坐标分配最大 n 值。我想我缺少关于 Python 如何遍历列表以及如何在 for 循环中使用它们的基本概念。这是对象:

 class Node:
     def __init__(self,x,y):
         self.x = x
         self.y = y

     def pos(self,x,y):
         self.x = x
         self.y = y

这是网格。为了简单起见,我设置 n=10:

 class Stage:

     bg = ([([comp.Node(0,0)] * 10)] * 10)

     def drawNodes(self):
         for x in range(10):
             for y in range(10):
                 self.bg[x][y].pos(x,y)

 stage1 = Stage()

当我 运行 drawNodes() 函数时,它似乎为所有 Node 对象分配了 x 和 y 值 9。我在这里缺少什么逻辑?感谢任何有建议的人!

问题是这个 bg = ([([comp.Node(0,0)] * 10)] * 10) 将对同一对象的引用放入所有条目中。试试这段代码看看效果

a = [[{}]*3]*3
a[0][0]["a"] = 100

这导致 [[{'a': 100}, {'a': 100}, {'a': 100}], [{'a': 100}, {'a': 100}, {'a': 100}], [{'a': 100}, {'a': 100}, {'a': 100}]]

尝试像这样初始化bg

bg = [[comp.Node(0,0) for _ in range(10)] for _ in range(10)]

这将创建 100 个不同的对象,而不仅仅是将对同一对象的引用放入列表的不同位置