# Syntax: pointers versus value

Danny Castonguay castong at mathstat.concordia.ca
Wed Jul 30 19:46:29 CEST 2003

```Tino Lange wrote:
> Use:
> listB = listA[:]

--------------------------------------------------------------------
In the example I have given, it does solve the problem.  However, for
some reason I don't understand, it doesn't work in the next example:

def ps_of_missing_edges(initial_graph, missing_edges):
num_m_e = len(missing_edges) #number of missing_edges
num_e_pset = 2**num_m_e
graphs = []
for i in range(0,num_e_pset): #iteration will stop at 2^num-1
temp_i = i #use temp_i to find i's bit values
new_graph = initial_graph[:]
print 'initial_graph is ' + str(initial_graph)
for j in range (0,num_m_e):
if temp_i%2 == 1:
new_graph[missing_edges[j][0]-1].append(missing_edges[j][1])
temp_i = temp_i >> 1
graphs.append(new_graph)
return graphs

--------------------------------------------------------------

the output when I call:
ps_of_missing_edges([[2,3],[1],[1]], [[2,3],[3, 2]])
is:
initial_graph is [[2, 3], [1], [1]]
initial_graph is [[2, 3], [1], [1]]
initial_graph is [[2, 3], [1, 3], [1]]
initial_graph is [[2, 3], [1, 3], [1, 2]]

--------------------------------------------------------------
Therefore, somehow initial_graph's value changes even though the
assignment is new_graph = initial_graph[:]

Assuming that the assignment does it's job, then I don't see how
initial_graph's value changes.

Thank you,

```