In Python, you use [:] when reassigning a variable to an original value (defined prior to the loop) at the start of each iteration. That is to say:
original_1D = ['o', 'o', 'o']
for i in range(0,3):
new = original_1D[:] # revert back to 'original_1D' list defined before loop
new[i] = 'X'
print new
produces output that is both desired and expected:
['X', 'o', 'o']
['o', 'X', 'o']
['o', 'o', 'X']
My issue arises if the original list is multi-dimensional (original_2D). For example:
original_2D = [['o', 'o', 'o'],['o', 'o', 'o']]
for i in range(0,3):
new = original_2D[:] # revert back to 'original_2D' list defined before loop
new[0][i] = 'X'
print new
From this, I want the following output:
# Desired
[['X', 'o', 'o'], ['o', 'o', 'o']]
[['o', 'X', 'o'], ['o', 'o', 'o']]
[['o', 'o', 'X'], ['o', 'o', 'o']]
but no! I get this:
# Actual
[['X', 'o', 'o'], ['o', 'o', 'o']]
[['X', 'X', 'o'], ['o', 'o', 'o']]
[['X', 'X', 'X'], ['o', 'o', 'o']]
as if the original_2D list gets overwritten which each iteration.
What am I doing wrong?