Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 3, 2014 04:26:59

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Казус с обработкой списков.

dimy44
глубокую копию списка позволяет делать метод copy.deepcopy(list) модуля copy
Стандартный питонячий приём из учебника гораздо проще
a = [1, 2, 3]
b = a[:]



Офлайн

#2 Фев. 3, 2014 04:47:28

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Казус с обработкой списков.

FishHook
речь идет о глубокой копии, а этот прием не даст такого:

>>> a=[1,
... 2,
... ['q','w','e'],
... 4,
... {'1':[10,20,30]}]
>>> b=a[:]
>>> c=deepcopy(a)
>>> print '{}\n{}\n{}'.format(a,b,c)
[1, 2, ['q', 'w', 'e'], 4, {'1': [10, 20, 30]}]
[1, 2, ['q', 'w', 'e'], 4, {'1': [10, 20, 30]}]
[1, 2, ['q', 'w', 'e'], 4, {'1': [10, 20, 30]}]
>>> a[0]=-1
>>> print '{}\n{}\n{}'.format(a,b,c)
[-1, 2, ['q', 'w', 'e'], 4, {'1': [10, 20, 30]}]
[1, 2, ['q', 'w', 'e'], 4, {'1': [10, 20, 30]}]
[1, 2, ['q', 'w', 'e'], 4, {'1': [10, 20, 30]}]
>>> a[2][0]='Q'
>>> print '{}\n{}\n{}'.format(a,b,c)
[-1, 2, ['Q', 'w', 'e'], 4, {'1': [10, 20, 30]}]
[1, 2, ['Q', 'w', 'e'], 4, {'1': [10, 20, 30]}]
[1, 2, ['q', 'w', 'e'], 4, {'1': [10, 20, 30]}]



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Фев. 3, 2014 04:50:07

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Казус с обработкой списков.

mojahed
про основоположников: это базовые понятия Питона о неизменяемых и изменяемых типах данных. в частности к вопросу о составных (читай вложенных) структурах



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Фев. 3, 2014 16:28:36

mojahed
Зарегистрирован: 2014-02-01
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Казус с обработкой списков.

Осознал. Благодарю dimy44, PanovSergey и JOHN_16
за отзывчивость и наводку. Мои списки 2х уровневые и потому кроме copy.deepcopy(list) ничего не годится. Про это все неплохо с картинками http://www.python-course.eu/deep_copy.php. Жаль авторы не пишут по русски. Так что, про “ о составных (читай вложенных) структурах” до меня дошло.

Офлайн

#5 Фев. 3, 2014 22:01:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Казус с обработкой списков.

FishHook
Стандартный питонячий приём из учебника гораздо проще
где-то тут уже обсуждали, почему он даёт только один слой
типа список представляет из себя массив указателей на объекты (не проверял),
и при таком копировании просто создаётся копия этого массива указателей; с immutable объектами это сработает нормально, а с mutable объектами - нет



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version