【发布时间】:2017-06-06 18:26:32
【问题描述】:
我试图在 python 中实现最短路径算法。当我尝试连接路径上的点时遇到了一些麻烦。
我有一个名为 NODE 的类 我制作了这些节点的数组,然后在其中创建了新节点,如下所示:
nodes = []
for r in range ( 0, 3 ):
for c in range ( 0, 3 ):
nodes.append( NODE( c*WIDTH/20 + 30, r*HEIGHT/20 + 30, 10 ) )
这创建了节点,这很好,我可以很好地绘制它们。
起初,我尝试通过将节点对象列表添加到 NODE 类中来连接它们。我遇到了一些问题,我认为问题出在递归类上,所以为了测试我做了这个。
其中connections是NODE类中的一个空白数组。
nodes[0].connections.append( 0 )
print nodes[0].connections
nodes[1].connections.append( 1 )
print nodes[1].connections
print nodes[0].connections
这就是我发现问题的地方,也许我只是愚蠢,还是语言问题?不知道,但我想我会问。
输出是这样的:
[ 0 ]
[ 0, 1 ]
[ 0, 1 ]
如您所见,我只在索引 1 的连接列表中添加了 1 个对象。但是当我打印内容时,我看到了两个....这让我感到困惑。
【问题讨论】:
-
如果没有看到包含实际
NODE类的 minimal reproducible example,这真的很难回答。 -
让我猜猜,
class Node有一个静态字段connections,而不是在构造函数中将connections初始化为一个新列表,以便所有对象共享一个连接列表?请出示您的Node班级。 -
我要继续说这是The mutable default argument的副本。
-
是的。那就是问题所在。我写它就好像我会用 Java 或 cpp 写东西一样。谢谢大家的帮助!
-
哪个是问题?静态属性还是可变默认参数?
标签: python arrays python-2.7 python-3.x