Форум сайта python.su
Доброго дня уважаемые
Возникла следующая проблема
есть список формируемый приблизительно следующим образом
a = 3
b = 4
lst = [a, b, a]
Офлайн
Не совсем понятно, чего именно Вы хотите
>>> a = 3
>>> b = 4
>>> lst = [a, b, a]
>>> lst
[3, 4, 3]
>>> lst[0] = 10
>>> lst
[10, 4, 3]
Офлайн
извиняюсь не правильно сформулировал задачу это происходит только если a и b списки
вот
In [29]: a=[2,4]
In [30]: b=[5,8]
In [31]: lst=[a,b,a]
In [32]: lst
Out[32]: [[2, 4], [5, 8], [2, 4]]
In [33]: lst[0][0]+=5
In [34]: lst
Out[34]: [[7, 4], [5, 8], [7, 4]]
Офлайн
В этом случае вам нужно третьим значением передавать ссылку не на а, а на его копию.
from copy import copy
>>> a = [2,4]
>>> b = [5,8]
>>> lst = [a,b,copy(a)]
>>> lst[0][0]+=5
>>> lst
[[7, 4], [5, 8], [2, 4]]
Офлайн
Это я понимаю но дело в том что те списки формируются в другом модуле в который мне лезть не хотелось бы
я хочу просто разобрать на на независимые части полученный список
Офлайн
Самый простой выход - создать новый список с того, который генерируется в другом модуле.
>>> a = [1,2]
>>> b = [3,4]
>>> lst = [a,b,a]
>>> lst2 = [copy(i) for i in lst]
>>> lst2
[[1, 2], [3, 4], [1, 2]]
>>> lst2[0][0]+=4
>>> lst2
[[5, 2], [3, 4], [1, 2]]
Офлайн
походу придется делать так я просто думал, что есть какой-нибудь встроенный метод
Офлайн
Sher-Khanвместо copy можно
походу придется делать так я просто думал, что есть какой-нибудь встроенный метод
ls2 = ls[:]
Отредактировано (Март 17, 2010 14:00:12)
Офлайн
Спосибо
Офлайн
PooHа нет не прокатило всеравно остается ссылка на первоначальный обект и он тоже изменяетсяSher-Khanвместо copy можно
походу придется делать так я просто думал, что есть какой-нибудь встроенный методэто “поверхностная” копия, а deepcopy копируют вложенные структурыls2 = ls[:]
Офлайн