0

I am trying to create an adjacency list in Python but I'm getting an unexpected result when appending to a 2D list in Python:

        edges = [[1,0],[1,2],[1,3]]
        adj_list = [[]] * n # assume n=4
        for n1, n2 in edges:
            adj_list[n1].append(n2)
            adj_list[n2].append(n1)
        print(adj_list)

Gives me [0, 1, 2, 1, 3, 1], [0, 1, 2, 1, 3, 1], [0, 1, 2, 1, 3, 1], [0, 1, 2, 1, 3, 1]]. When what I was expecting was something like [[1], [0,2,3], [1], [1]]. I am not able to understand what is wrong with my logic in the for loop. The following statement works exactly as expected:

>>> adj_list = [[],[],[],[]]
>>> adj_list[1].append(0)
>>> adj_list[0].append(1)
>>> adj_list[1].append(2)
>>> adj_list[2].append(1)
>>> adj_list[1].append(3)
>>> adj_list[3].append(1)
>>> adj_list
[[1], [0, 2, 3], [1], [1]]
Shams Ansari
  • 762
  • 5
  • 12

0 Answers0