I created a 2 'dimensional' list where each element is None.
listA = [[None] * 8 ] *8
by logic I thought I could access each element individually by choosing between 2 coordinates the horizontal and the vertical one.
listA[y][x]
but I ran into a problem that I can't explain and I would need help the problem is as follows.
We agree that:
[[None] * 8 ] *8 == [[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None]]
The python interpreter returns True.
So if I make :
ListA = [[None] * 8 ] *8
And
ListaB = [[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None]]
And after I edit the element in the same position in both lists I will get the same result right ?
ListA[0][0]= 3
ListaB[0][0]= 3
But strangely at this point the two lists are different :
ListA == ListB
return False
print(ListA) = `
[[3, None, None, None, None, None, None, None],
[3, None, None, None, None, None, None, None],
[3, None, None, None, None, None, None, None],
[3, None, None, None, None, None, None, None],
[3, None, None, None, None, None, None, None],
[3, None, None, None, None, None, None, None],
[3, None, None, None, None, None, None, None],
[3, None, None, None, None, None, None, None]]`
print(ListB) =
[[3, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None]]
I cannot logically understand why.
to me it look like Python remeber the way listA was constructed and use the same process to update it, if so I am beginning to think that python does not evaluate the expression to be assigned to a variable but assigns the expression to a varible which is quite equivocal if you ask me.