python运行一个诡异的地方,求指点

2013-09-19 15:15:46 +08:00
 Karsa
env :
Python 2.7.2 (default, Oct 11 2012, 20:14:37)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin

问题,copyedNode.neighbors.append(copyingNode)这一行会把copyingNode的neighbors同样append一个copyingNode自身,不懂求指教



class Node():
index = 0
neighbors = []
def __init__ (self, arg) :
self.index = arg

def description(self):
out = []
out.append (self.index)
for item in self.neighbors:
out.append(item.index)
print (out)

def allNode (self, checkArray, out) :
tempNodesArray = self.neighbors[:]
tempNodesArray.append(self)
for node in tempNodesArray:
if node in checkArray:
pass
else:
checkArray.append(node)
if node in out:
pass
else:
out.append(node)
node.allNode(checkArray, out)
def copy(self):
queue = [self]
copyNode = Node(self.index)
nodesMap = {self:copyNode}

while len(queue) > 0:
node = queue.pop()
copyedNode = nodesMap[node]
for subNode in node.neighbors :
if subNode in nodesMap :
copyedNode.neighbors.append(nodesMap[subNode])
else:
copyingNode = Node(subNode.index)
copyedNode.neighbors.append(copyingNode)
copyingNode.neighbors = []
nodesMap[subNode] = copyingNode
queue.append(subNode)
copyedNode.description()
return copyNode

#///////// test code below //////////
#create nodes in graph
nodes = []
for i in range (0, 7) :
node = Node(i)
nodes.append(node)

#create relation ships among all nodes
for node in nodes:
tempNodesArray = nodes[:]
tempNodesArray.remove(node)
node.neighbors = tempNodesArray

print("old graph")
for node in nodes:
node.description()

print("new graph")
newnode = nodes[0].copy()
3116 次点击
所在节点    Python
3 条回复
TankyWoo
2013-09-20 02:41:27 +08:00
用 gist 重贴一下你的代码吧。

Python代码没有格式,缩进会要人命的。。。
Karsa
2013-09-22 17:14:40 +08:00
Karsa
2013-09-22 17:18:00 +08:00
唉,第一次在这里使用gist,想着把嵌入代码放上,加个链接的,结果变成这样了。囧~~~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/83018

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX