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