Форум сайта python.su
а нет не прокатилоКакие ваши доказательства?
Офлайн
Ferroman
Какие ваши доказательства?
>>> x = [1,2]
>>> y = x[:]
>>> id(x[0])
10017008
>>> id(y[0])
10017008
Офлайн
Ferromanвот они
Какие ваши доказательства?
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]]
In [35]: lst2=lst[:]
In [36]: lst[0][0]+=5
In [37]: lst
Out[37]: [[12, 4], [5, 8], [12, 4]]
In [38]: lst2
Out[38]: [[12, 4], [5, 8], [12, 4]]
In [39]: lst2[0][0]+=5
In [40]: lst2
Out[40]: [[17, 4], [5, 8], [17, 4]]
In [41]: lst
Out[41]: [[17, 4], [5, 8], [17, 4]]
Офлайн
PooHПохоже только не в этом случае…
deepcopy копируют вложенные структуры
>>> import copy
>>> a = [1,2]
>>> b = [3,4]
>>> c = [a,b,a]
>>> d = copy.deepcopy(c)
>>> d
[[1, 2], [3, 4], [1, 2]]
>>> d[0][0] = 800
>>> d
[[800, 2], [3, 4], [800, 2]]
>>> a
[1, 2]
>>> d[0] is d[2]
True
>>> d[0] is a
False
Офлайн
это все я знаю но deepcopy сохраняет внутренние связи в объекте
Офлайн
regall
Это к чему? Я хотел доказательств того, что
всеравно остается ссылка на первоначальный обект и он тоже изменяетсяSher-Khan
это “поверхностная” копия, а deepcopy копируют вложенные структуры
Офлайн
А подскажите пожалуйста, такой метод класса
def copy(self):
return self
Отредактировано (Июнь 20, 2010 16:16:46)
Офлайн
Вернёт ссылку на экземпляр класса, или его независимую копию?Ссылку, разумеется. Могли бы и сами проверить. Всё же быстрее, чем дожидаться ответа на форуме.
In [1]: class A(object):
...: def copy(self):
...: return self
...:
In [2]: a = A()
In [3]: b = a.copy()
In [4]: print(id(b),id(a))
(23037520, 23037520)
Отредактировано (Июнь 21, 2010 06:38:00)
Офлайн