python 打印函数的非常奇怪的行为:打印以某种方式改变了函数的结果

问题描述

我正在尝试使用 networkx 比较两个图是否同构。然而,我发现了一个非常奇怪的问题,让我困惑了好几天。我有一个函数 get_graph,它将节点、边缘起点和边缘终点作为输入。在调试的时候,我在函数中加了一行print(list(edges))来打印出压缩后的edges。然后我震惊地发现这在某种程度上改变了同构的结果。如果你试试我下面的代码,你会发现如果你添加那条线,你会发现这两个图是同构的,但注释掉的时候不是同构的。

我认为这与 networkx 或一般图形没有任何关系。这应该被视为 print 函数的奇怪行为。就我而言,print 函数不应该改函数的结果。有人知道吗?

import numpy as np
import networkx as nx
import networkx.algorithms.isomorphism as iso

def get_graph(nodes,edge_starts,edge_ends):
    G = nx.Graph()
    G.add_nodes_from(nodes)
    edges = zip(edge_starts,edge_ends)

#    print(list(edges))

    G.add_edges_from(edges)
    return G

nodes1 = [(0,{'symbol': 'Ni'}),(1,{'symbol': 'Pt'}),(2,(3,(4,(5,(6,(7,(8,(9,(10,(11,(12,(13,(14,(15,(16,{'symbol': 'CH3'}),(17,{'symbol': 'OH'}),(18,{'symbol': 'CO'})]
starts1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18]
ends1 = [0,1,9]

G1 = get_graph(nodes1,starts1,ends1)

nodes2 = [(0,{'symbol': 'CO'})]
starts2 = [1,18]
ends2 = [0,13]

G2 = get_graph(nodes2,starts2,ends2)

print(nx.isomorphism.is_isomorphic(G1,G2))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)