Форум сайта python.su
Доброго времени суток.
Вот у меня есть один список. Он глобален и не должен подвергаться изменению. Он - образец.
Теперь мне нужно в конструкторе объекта делать его копию в локальное поле этого объекта.
Я правильно понимаю, что вариант
self.main_list = MAIN_LIST - не работает, потому что это просто ссылка будет и все изменения будет глобальны?
То есть нужно делать:
self.main_list =
так? это единственный способ?
И как мне защитить глобальный лист от себя самого? Как вариант придумал его обернуть в свой класс, где перекрыл операторы; на сколько этот вариант правилен?
Офлайн
Просто вместо list используй неизменяемый tuple.
Отредактировано (Июнь 27, 2008 12:01:23)
Офлайн
Любой изменяемый объект можно безопасно копировать при помощи функции deepcopy из модуля copy.
Просто список можно копировать еще такими способами:
a =
b = a
b = list(a)
Кстати, эти два способа работают аналогично функции copy (swallow copy instead of deep) из модуля copy.
Отредактировано (Июнь 27, 2008 12:04:12)
Офлайн
Во, спасибо больше :) остановился на варианте с кортежем и приведением его к листу
main_list = list(MAIN_LIST)
Офлайн