Networkx 复制说明
Networkx copy clarification
根据 doc,networkx.copy
方法似乎对图形进行了深度复制。我最关心的说法
This makes a complete copy of the graph including all of the node or edge attributes.
这是否暗示它也复制了节点包含的内容?例如,如果我有以下
class NodeContainer(object):
def __init__(self, stuff):
self.stuff = stuff
# ..other class stuff
g = networkx.DiGraph():
n1 = NodeContainer(stuff1)
n2 = NodeContainer(stuff2)
g.add_edge(n1,n2)
g2 = g.copy()
在 g2 = g.copy()
行中,是否也对 NodeContainer
对象进行深拷贝?如果是这样,是否存在浅拷贝的现有实现?我找不到一个。我问是因为我目前使用创建一个图表的副本,我将编辑(从中删除节点)但不更改实际节点本身。所以我不需要那种意义上的深拷贝,只需要图形结构的表示。
编辑:如果可能的话我也想做一个浅reverse()
您可以使用 class 构造函数进行浅拷贝。例如。对于图表,
In [1]: import networkx as nx
In [2]: G = nx.Graph()
In [3]: G.add_edge(1,2,l=['a','b','c'])
In [4]: H = nx.Graph(G) # shallow copy
In [5]: H[1][2]['l']
Out[5]: ['a', 'b', 'c']
In [6]: H[1][2]['l'].append('d')
In [7]: H[1][2]['l']
Out[7]: ['a', 'b', 'c', 'd']
In [8]: G[1][2]['l']
Out[8]: ['a', 'b', 'c', 'd']
根据 doc,networkx.copy
方法似乎对图形进行了深度复制。我最关心的说法
This makes a complete copy of the graph including all of the node or edge attributes.
这是否暗示它也复制了节点包含的内容?例如,如果我有以下
class NodeContainer(object):
def __init__(self, stuff):
self.stuff = stuff
# ..other class stuff
g = networkx.DiGraph():
n1 = NodeContainer(stuff1)
n2 = NodeContainer(stuff2)
g.add_edge(n1,n2)
g2 = g.copy()
在 g2 = g.copy()
行中,是否也对 NodeContainer
对象进行深拷贝?如果是这样,是否存在浅拷贝的现有实现?我找不到一个。我问是因为我目前使用创建一个图表的副本,我将编辑(从中删除节点)但不更改实际节点本身。所以我不需要那种意义上的深拷贝,只需要图形结构的表示。
编辑:如果可能的话我也想做一个浅reverse()
您可以使用 class 构造函数进行浅拷贝。例如。对于图表,
In [1]: import networkx as nx
In [2]: G = nx.Graph()
In [3]: G.add_edge(1,2,l=['a','b','c'])
In [4]: H = nx.Graph(G) # shallow copy
In [5]: H[1][2]['l']
Out[5]: ['a', 'b', 'c']
In [6]: H[1][2]['l'].append('d')
In [7]: H[1][2]['l']
Out[7]: ['a', 'b', 'c', 'd']
In [8]: G[1][2]['l']
Out[8]: ['a', 'b', 'c', 'd']