2014-11-15 4 views
0

У меня возникли проблемы с копированием списков в одной из моих программ, которые я пытаюсь сделать в Python.Список изменен даже при использовании deepcopy

Так в основном вот линия у меня возникают проблемы с:

print(a) 
print(b) 
a[0]=deepcopy(b[0][-1][0][:1]) 
print(b) 

(Отпечатки здесь только для целей отладки, так что я мог видеть, как эти списки были изменены) и вот что печать показать:

[[1, 2, 3, 5], [0, 5, 9, 10]] 
[[[[1, 2, 3, 5], [0, 5, 9, 10]]]] 
[[[[1], [0, 5, 9, 10]]]] 

Так что вопрос в том, что «б» был фактически изменен, хотя я использовал «DeepCopy» из него, что не имеет абсолютно никакого смысла для меня. И это происходит только внутри моего кода, потому что если вы пытаетесь запустить те же строки кодов (назначив «a» и «b» тому, что показано вышеприведенными отпечатками), на самом деле он не будет изменять «b ». Итак, мой вопрос заключается в том, что может привести к изменению списка при «глубокой печати»? Я не поместил всю программу, потому что она длинная, и все имена и комментарии в ней находятся на французском языке, поэтому я просто прошу общий ответ, который может помочь мне понять, почему это произошло. Надеюсь, мои объяснения были достаточно ясными. Скажите, пожалуйста, если они не были, и я попытаюсь объяснить лучше =). Спасибо.

ответ

0

Возможно у вас есть эта структура:

a = [[1, 2, 3, 5], [0, 5, 9, 10]] 
b = [[a]] 

Нет, изменить список a, если вы установите элемент список с копией или нет, не имеет значения.

a[0] = [1] # b[0][-1][0][:1] 

Так что теперь a является

a = [[1], [0, 5, 9, 10]] 

и b является то, что вы печатаете.

+0

О да, я получил это сейчас! Ну, единственное исправление, о котором я могу думать, - это «b = deepcopy (b)», чтобы сделать b полностью независимым. Спасибо за помощь. – Tekeur

Смежные вопросы