В моем коде:
line_x = 10
c = 'A'
d = 'B'
a = {}
a['one']='| | | | | |'
a['two']='| | | | | |'
#untill thirteen
vak = a.keys()
b = a #copy the dictionary
spot = a[vak[0]]
spot2 = b[vak[0]]
a[vak[0]] = spot[:(line_x)]+ d+ spot[(line_x+1):]
b[vak[0]] = spot2[:(line_x)]+ c+ spot2[(line_x+1):]
print a[vak[0]] #output_a = | | | A | | |
print b[vak[0]] #output_b = | | | A | | | <- which should be a 'B' in the middle
У меня возникли проблемы с копированием словаря и изменением значения.
Когда я хочу изменить значение в одном из словарей, изменяется значение как оригинала, так и копии. Но я хочу, чтобы оригинал изменился и у меня была копия, чтобы перейти на что-то еще. Я не могу найти проблему, хотя она находится в таком маленьком и относительно легком коде.
b = a
не копирует словарь, он перепроверяет b
чтобы указать на тот же объект, что a
(так что при изменении a
вы также можете наблюдать эффект на b
). Вместо этого используйте b = copy.copy(a)
(модуль copy
).
b = dict(a)
copy
более описательной.
b = a #copy the dictionary
не копирует словарь, просто его ссылку. Вы должны скопировать его явно:
b = copy(a)
Это создаст копию словаря, и вы сможете манипулировать ими, и это сработает. Просто помните, что изменяемые объекты в словарях будут меняться в обоих (если они все еще присутствуют в обоих), если вы измените их на один. Взгляните на это:
http://en.wikipedia.org/wiki/Object_copy#Deep_vs._Shallow_vs._Lazy_copy