<｜begin▁of▁sentence｜>### Instruction:
As a Training Coordinator, you have been tasked with creating a training program on network analysis using a specific software called NetworkX. During the program, you need to demonstrate the process of creating both a shallow copy and a deep copy of an undirected graph. To ensure the accuracy of the copies, you will need to validate that the attributes of the original and copied graphs are identical. This will enable the participants to understand the concept of shallow and deep copying in practical terms.
### Response:
from igraph import Graph
from copy import deepcopy

# Create a simple undirected graph
original_graph = Graph.Formula('A--B--C--D')

# Make a shallow copy of the graph
shallow_copied_graph = original_graph.copy()

# Make a deep copy of the graph
deep_copied_graph = deepcopy(original_graph)

# Display the adjacency lists of the original and copied graphs
def print_graph_info(g):
    print('Adjacency:', g.get_adjlist())
    print('Vertex Names:', g.vs['name'])

print('Original Graph')
print_graph_info(original_graph)

print('\nShallow Copied Graph')
print_graph_info(shallow_copied_graph)

print('\nDeep Copied Graph')
print_graph_info(deep_copied_graph)
<|EOT|>
