Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 27, 2008 11:52:36

ice
От:
Зарегистрирован: 2008-01-12
Сообщения: 156
Репутация: +  0  -
Профиль   Отправить e-mail  

Немного про списки (lists)

Доброго времени суток.

Вот у меня есть один список. Он глобален и не должен подвергаться изменению. Он - образец.

Теперь мне нужно в конструкторе объекта делать его копию в локальное поле этого объекта.
Я правильно понимаю, что вариант

self.main_list = MAIN_LIST - не работает, потому что это просто ссылка будет и все изменения будет глобальны?

То есть нужно делать:

self.main_list =

так? это единственный способ?
И как мне защитить глобальный лист от себя самого? Как вариант придумал его обернуть в свой класс, где перекрыл операторы; на сколько этот вариант правилен?



Офлайн

#2 Июнь 27, 2008 11:55:06

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Немного про списки (lists)

Просто вместо list используй неизменяемый tuple.



Отредактировано (Июнь 27, 2008 12:01:23)

Офлайн

#3 Июнь 27, 2008 12:00:56

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Немного про списки (lists)

Любой изменяемый объект можно безопасно копировать при помощи функции deepcopy из модуля copy.
Просто список можно копировать еще такими способами:
a =
b = a
b = list(a)
Кстати, эти два способа работают аналогично функции copy (swallow copy instead of deep) из модуля copy.



Отредактировано (Июнь 27, 2008 12:04:12)

Офлайн

#4 Июнь 27, 2008 12:32:26

ice
От:
Зарегистрирован: 2008-01-12
Сообщения: 156
Репутация: +  0  -
Профиль   Отправить e-mail  

Немного про списки (lists)

Во, спасибо больше :) остановился на варианте с кортежем и приведением его к листу
main_list = list(MAIN_LIST)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version