Форум сайта python.su
0
Здравствуйте всем.
Имею исходный список:
a2 = [, , , ]
Мне в нем надо нечто вроде брут форса менять либо в столбцах, либо в строках данные.
Делаю копию: atl40 = list(a2) либо atl40 = a2 без разницы.
Передаю эту копию в функцию. Там завожу рабочую копию для подстановки
global ay
ay = ax
Произвожу подстановку в рабочем списке ау. Как то так:
def install_ch(ax, dx, np, sem, nsp, nr):
bufx = dx
j=0
global ay
ay = ax
if sem == 1: #strinf здесь подстановка
for i in range(4):
if ax == 0:
ay = bufx
j +=1
После отработки функции имею подстановку значений во всех трех списках a2, atl40, ay,
хотя этого не должно быть. Id у всех трех списков разные, я проверял. Почему? Что я делаю не так?
Idle 3.3.3.
Офлайн
253
mojahedНе используете при редактирования кода теги <>. Так ваш код почти никто и читать не станет.
Что я делаю не так?
mojahedЭто точно не копия а назначение alias имени для того-же списка. Азы питона. При помощи оператора id всегда можете посмотреть куда ссылаетесь.
atl40 = a2
a=2 b=[] c=b print(id(b)) print(id(c))
Отредактировано doza_and (Фев. 1, 2014 08:21:21)
Офлайн
0
Спасибо за помощь. Уже разобрался. Про Id знаю и писал в сообщении. Проблему решил tuple - list и наоборот.
Офлайн
глубокую копию списка позволяет делать метод copy.deepcopy(list) модуля copy
Офлайн
2
а использование list(spisok) не создает новую полную копию списка spisok?
Офлайн
Это вопрос или наставление? Проверьте
d = {1:1} L = list([d]) d[1] = 2 print(L)
Офлайн
0
Может я не совсем правильно сформулировал проблему в топике.
Речь идет о том что. при обработке копии списка все изменения имеют место и в оригинале и во 2й копии несмотря на то что все три объекта имеют разные Id. У основоположников про это внятно не говорится. Я для себя проблему закрыл list<==>tuple. Топик можно считать закрытым.
Офлайн
Ну я вам выше в посте #4 написал, как это по-уму делают, а не велосипедят.
Офлайн
19
Делаю копию: atl40 = list(a2) либо atl40 = a2 без разницы.Я один считаю что это примерно так *ptr1 = *ptr2?
Офлайн
>>> что все три объекта имеют разные Id.
имеют. Но надо смотреть, что внутри. Там могут быть объекты с общими ссылками. Надо понимать разницу между гладкой и глубокой копией объектов. Последняя достигается рекурсивным обходом и копированием каждого нуждающегося в этом объекте на максимально возможную глубину. Ладно вобщем, сколько можно, ясно всё.
Отредактировано dimy44 (Фев. 2, 2014 21:16:00)
Офлайн