DiGraph.copy#

DiGraph.copy(as_view=False)#

返回图的一个副本。

默认情况下,copy方法返回图和属性的独立浅拷贝。也就是说,如果一个属性是一个容器,那么该容器由原始图和副本共享。使用Python的 copy.deepcopy 来创建新的容器。

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

Parameters:
as_viewbool, 可选 (默认=False)

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

Returns:
GGraph

图的副本。

See also

to_directed

返回图的有向副本。

Notes

所有副本都会复制图结构,但数据属性可能以不同的方式处理。人们可能想要四种图的副本。

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

数据引用(浅拷贝)– 对于浅拷贝,图结构被复制,但边、节点和图属性字典是对原始图中这些字典的引用。这节省了时间和内存,但如果在一个图中更改属性可能会导致另一个图中的属性也发生变化,这可能会引起混淆。NetworkX不提供这种级别的浅拷贝。

独立浅拷贝 – 这种拷贝创建新的独立属性字典,然后对属性进行浅拷贝。也就是说,任何作为容器的属性在新的图和原始图之间共享。这正是 dict.copy() 提供的功能。你可以通过以下方式获得这种风格的拷贝:

>>> G = nx.path_graph(5)
>>> H = G.copy()
>>> H = G.copy(as_view=False)
>>> H = nx.Graph(G)
>>> H = G.__class__(G)

新鲜数据 – 对于新鲜数据,图结构被复制,同时创建新的空数据属性字典。生成的图与原始图独立,并且没有边、节点或图属性。新鲜副本未启用。而是使用:

>>> H = G.__class__()
>>> H.add_nodes_from(G)
>>> H.add_edges_from(G.edges)

视图 – 受字典视图的启发,图视图类似于原始图的只读版本,提供原始结构的副本,而不需要复制信息的任何内存。

有关浅拷贝和深拷贝的更多信息,请参见Python的copy模块,https://docs.python.org/3/library/copy.html

Examples

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