Найти - Пользователи
Полная версия: замена ссылок в списке на их значения
Начало » Python для новичков » замена ссылок в списке на их значения
1 2
Ferroman
а нет не прокатило
Какие ваши доказательства?
regall
Ferroman
Какие ваши доказательства?
>>> x = [1,2]
>>> y = x[:]
>>> id(x[0])
10017008
>>> id(y[0])
10017008
Sher-Khan
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]]
Nik
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
Sher-Khan
это все я знаю но deepcopy сохраняет внутренние связи в объекте
Ferroman
regall
Это к чему? Я хотел доказательств того, что
всеравно остается ссылка на первоначальный обект и он тоже изменяется
Sher-Khan
Вам же так и написали:
это “поверхностная” копия, а deepcopy копируют вложенные структуры
Eliont
А подскажите пожалуйста, такой метод класса
       def copy(self):
return self
Вернёт ссылку на экземпляр класса, или его независимую копию?
.Serj.
Вернёт ссылку на экземпляр класса, или его независимую копию?
Ссылку, разумеется. Могли бы и сами проверить. Всё же быстрее, чем дожидаться ответа на форуме.
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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB