Let’s say I have a table of values in Python. I generate the table this way:
table = [[True] * 11] * 7
This makes for a list of 7 lists, each of which contain 11 True values:
[[True True True True True True True True True True True],
[True True True True True True True True True True True],
[True True True True True True True True True True True],
[True True True True True True True True True True True],
[True True True True True True True True True True True],
[True True True True True True True True True True True],
[True True True True True True True True True True True]]
Say I change table[6][4] to False (table[6][4] = False). I would expect only that slot to be changed:
[[True True True True True True True True True True True],
[True True True True True True True True True True True],
[True True True True True True True True True True True],
[True True True True True True True True True True True],
[True True True True True True True True True True True],
[True True True True True True True True True True True],
[True True True True False True True True True True True]]
But apparently the 4th column in every other list is changed as well:
[[True True True True False True True True True True True],
[True True True True False True True True True True True],
[True True True True False True True True True True True],
[True True True True False True True True True True True],
[True True True True False True True True True True True],
[True True True True False True True True True True True],
[True True True True False True True True True True True]]
What’s going on?
If you do
you create a list with 11
Trues and then you wrap it seven-fold in a list. Not by copying it, but by referencing it several times.If you create 7 distinct lists, such as in
you are better off.