Моя задача на примитивном примере:
Исходный список: a=['a','b','c','d']
Нужно получить:a=[['X','b','c','d'],['a','X','c','d'],['a','b','X','d'],['a','b','c','X']]
т.е. последовательно менять один из элементов исходного списка на 'X' и добавлять каждый полученный список в исходный.
# coding: utf-8
a=[['a','b','c','d']]
b=['a','b','c','d']
for i in range(0,len(b)):
c=b
c[i]='X'
a.append(c)
print(a)
print(b)
полученный результат:
[['a', 'b', 'c', 'd'], ['X', 'X', 'X', 'X'], ['X', 'X', 'X', 'X'], ['X', 'X', 'X', 'X'], ['X', 'X', 'X', 'X']]
['X', 'X', 'X', 'X']
Он показывает, что интерпретатор даже список b поменял который вне пределов цикла, потому что видимо с=b, и все четыре новых списка он тоже приравнял к последнему с неправильному, т.к. он постепенно менял и b.
На числовых значениях такого не происходит. Т.е. он не меняет значение b, если я к нему приравняю с, а потом с изменю, b не поменяется.
Вопрос: как мне обойти эту особенность интерпретатора, если он меняет даже то, что вроде менять не должен?