MultiGraph.copy#
- MultiGraph.copy(as_view=False)[source]#
返回图的副本。
copy 方法默认返回图及其属性的独立的浅拷贝。也就是说,如果属性是一个容器,该容器将在原始图和副本之间共享。对于新的容器,请使用 Python 的
copy.deepcopy
。如果
as_view
为 True,则返回一个视图而不是副本。- 参数:
- as_viewbool, 可选 (默认值=False)
如果为 True,返回的图视图提供原始图的只读视图,而不实际复制任何数据。
- 返回值:
- GGraph
图的副本。
另请参阅
to_directed
返回图的有向副本。
注意
所有副本都会复制图的结构,但数据属性的处理方式可能不同。图的副本有四种类型是人们可能需要的。
深拷贝 (Deepcopy) – “深拷贝”复制图的结构以及所有数据属性和它们可能包含的任何对象。整个图对象是新的,因此副本中的更改不会影响原始对象。(参见 Python 的 copy.deepcopy)
数据引用(浅层)(Data Reference (Shallow)) – 对于浅拷贝,图结构被复制,但边、节点和图属性字典是对原始图中对应字典的引用。这节省了时间和内存,但如果你在一个图中更改属性,而导致另一个图中的属性也发生更改,可能会引起混淆。NetworkX 不提供这种级别的浅拷贝。
独立浅拷贝 (Independent Shallow) – 这种拷贝创建新的独立的属性字典,然后对属性进行浅拷贝。也就是说,任何作为容器的属性在新图和原始图之间共享。这与
dict.copy()
提供的一致。您可以使用以下方法获得这种风格的拷贝:>>> G = nx.path_graph(5) >>> H = G.copy() >>> H = G.copy(as_view=False) >>> H = nx.Graph(G) >>> H = G.__class__(G)
新数据 (Fresh Data) – 对于新数据,图结构被复制,同时创建新的空数据属性字典。结果图独立于原始图,并且没有边、节点或图属性。不启用新数据拷贝。请改为使用:
>>> H = G.__class__() >>> H.add_nodes_from(G) >>> H.add_edges_from(G.edges)
视图 (View) – 受 dict-views 启发,图视图的行为类似于原始图的只读版本,提供了原始结构的副本,而不需要任何内存来复制信息。
有关浅拷贝和深拷贝的更多信息,请参阅 Python copy 模块,https://docs.pythonlang.cn/3/library/copy.html。
示例
>>> G = nx.path_graph(4) # or DiGraph, MultiGraph, MultiDiGraph, etc >>> H = G.copy()