That is because you have not created your array the way you mentioned in the question. Instead you created it using * as:
>>> [[0]*3]*3
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
In this case, all the nested list are point to the same reference of the list. Updating any value in list will reflect changes in all the list:
>>> array = [[0]*3]*3
>>> array[0][1] = 1 # updating 0th list
>>> array
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
#    ^          ^          ^  all 1 indexes updated
>>> array[1][0] = 2 # updating 1st list
>>> array
[[2, 1, 0], [2, 1, 0], [2, 1, 0]]
# ^          ^          ^     all 0 indexes updated
In order to fix this, create your array like:
>>> [[0]*3 for _ in range(3)]
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
On performing same set of operations on this list, I get:
>>> array = [[0]*3 for _ in range(3)]
>>> array[0][1] = 1
>>> array  
[[0, 1, 0], [0, 0, 0], [0, 0, 0]]
#    ^   Only one value updated as expected
>>> array[1][0] = 2
>>> array
[[0, 1, 0], [2, 0, 0], [0, 0, 0]]
#            ^ again as expected