Edges are either two-tuples of nodes (u,v) or three tuples of nodes
with an edge attribute dictionary (u,v,dict).

ebunch

An iteratable container of edge tuples like a list, iterator,
or file.

edge attribute

Edges can have arbitrary Python objects assigned as attributes
by using keyword/value pairs when adding an edge
assigning to the G.edges[u][v] attribute dictionary for the
specified edge u-v.

hashable

An object is hashable if it has a hash value which never changes
during its lifetime (it needs a __hash__() method), and can be
compared to other objects (it needs an __eq__() or __cmp__()
method). Hashable objects which compare equal must have the same
hash value.

Hashability makes an object usable as a dictionary key and a set
member, because these data structures use the hash value internally.

All of Python’s immutable built-in objects are hashable, while no
mutable containers (such as lists or dictionaries) are. Objects
which are instances of user-defined classes are hashable by
default; they all compare unequal, and their hash value is their
id().