I have the following python2 program:
A=[]
for i in range(2):
    A.append(list(["hello"])) 
print "A is",A
F=[]
for i in range(2):
    F.append(list(A))
print "F[0] is", F[0]
print "F[1] is", F[1]
F[0][0].append("goodbye")
print "F[0][0] is", F[0][0]
print "F[1][0] is", F[1][0]
When I run it, I get the output:
A is [['hello'], ['hello']]
F[0] is [['hello'], ['hello']]
F[1] is [['hello'], ['hello']]
F[0][0] is ['hello', 'goodbye']
F[1][0] is ['hello', 'goodbye']
I was expecting the contents of F[1][0] to be just ['hello']. I thought that the program's current behaviour would be normal if I had written
F.append(A) instead of F.append(list(A)). But, by writing list(A) instead of just A I should be passing the list A by value, and not by reference.
What have I misunderstood here?
EDIT: The program has the same behaviour if I write F.append(A[:]) instead of F.append(list(A))
 
    