2015-04-24 3 views
3

Согласно doc, похоже, что метод networkx.copy выполняет глубокую копию графика. Меня больше всего волнует заявлениеNetworkx copy clarification

Это делает полную копию графика, включающего все атрибуты узла или края.

Является ли это предположением, что оно делает копию того, что содержит узлы? Например, если я следующий

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 объектов, а? Если да, существует ли существующая реализация мелкой копии? Я не смог его найти. Я спрашиваю, потому что в настоящее время у меня есть использование, чтобы создать копию графика, который я отредактирую (удалите узлы), но не изменит сами фактические узлы. Поэтому мне не нужна глубокая копия в этом смысле, просто представление структуры графа.

EDIT: Если это возможно, я хотел бы также сделать неглубокий reverse()

+0

Это не похоже на глубокую копию с версии 2.0. – xuhdev

ответ

3

Вы можете сделать неполную копию с помощью конструктора класса. Например. для графиков,

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']