Graph.copy#

Graph.copy(as_view=False)[source]#

返回图的副本。

默认情况下,copy 方法返回图及其属性的一个独立的浅层副本。也就是说,如果某个属性是一个容器,则原始图和副本会共享该容器。对于新的容器,请使用 Python 的 copy.deepcopy

如果 as_view 为 True,则返回一个视图而不是副本。

参数:
as_viewbool,可选 (默认值为 False)

如果为 True,返回的图视图提供原始图的只读视图,而无需实际复制任何数据。

返回:
GGraph

图的副本。

另请参阅

to_directed

返回图的有向副本。

注意

所有副本都会复制图结构,但数据属性的处理方式可能不同。图的副本有四种类型,用户可能会需要。

深层复制 (Deepcopy) – “深层复制”会复制图结构以及所有数据属性和它们可能包含的任何对象。整个图对象都是新的,因此对副本的更改不会影响原始对象。(参见 Python 的 copy.deepcopy)

数据引用 (浅层) – 对于浅层复制,图结构被复制,但边、节点和图属性字典是原始图中的引用。这可以节省时间和内存,但如果在其中一个图中更改属性,而另一个图中的属性也随之改变,可能会导致混淆。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) – 受字典视图启发,图视图的行为类似于原始图的只读版本,提供了原始结构的副本,同时无需为复制信息占用任何内存。

有关浅层复制和深层复制的更多信息,请参阅 Python copy 模块,https://docs.pythonlang.cn/3/library/copy.html

示例

>>> G = nx.path_graph(4)  # or DiGraph, MultiGraph, MultiDiGraph, etc
>>> H = G.copy()