Архив автора: admin

Веночек из конфет

Вселенские Законы для вашего Успеха

радужная земля и небоВсе мы, часто даже не задумываясь об этом, живем по Вселенским законам, которые также можно назвать Законами Успеха.

Это и Закон причины и следствия, или Закон Кармы, и Закон Дарения, и Закон наименьшего усилия, и Закон Предназначения, и Закон Непривязанности, и Закон Единства, и Закон Намерения и Желания. О Законе Дарения  мы  подробно рассказывали Вам раньше.
Читать

Избавляемся от менструальных болей с помощью народных средств

 

На сильные болезненные ощущения, сопровождающие менструацию, жалуются восемь из десяти женщин. В каждом отдельном случае причины и характер боли являются индивидуальными. Однако в любом случае нужно уметь вовремя и грамотно избавиться от болевых ощущений. Большинство женщин отдают предпочтение приему сильнодействующих обезболивающих препаратов, но, поскольку все знают о негативных последствиях употребления болеутоляющих препаратов, все же лучше выбирать другой способ, способствующий облегчению боли. Читать

Единственное, где мы действительно можем делать выбор — это в своём сердце…

царь СоломонОднажды некто пришёл к Соломону и сказал ему:
— Царь, помоги мне! Каждый раз, когда мне приходится делать выбор, я не могу спокойно спать — мечусь и страдаю, и раздумываю, то ли я сделал, что должно. Что мне делать?
И ответил мудрый царь:
Выбора не существует.
И ещё спросил он:
— Ты бы бросился в реку, увидев тонущего ребенка?
Читать

python copy/deepcopy

Всем привет!

Продолжаем ломать копья об питоновскую парадигму изменяемых/неизменяемых объектов.
Разберем поверхностное и глубокое копирование словаря.

>>>s = {«str»: «1», «list»: [1, 2], «dict»: {«first»: «test1»}}
>>>f = s
>>>f['second'] = '2'

>>>print s

Надеюсь понятно какой вывод будет в консоли. Если нет, то смотрим ссылки.
Для того чтобы не ссылаться на один объект, нужно скопировать словарь s.

Но метод copy обладает неприятной особенностью, он поверхностно копирует словарь.
Смотрим на пример (s из предыдущего примера).

>>>f = s.copy()
>>>f['second'] = '3'
>>>f['dict']['third'] = '3'
>>>print s

{'dict': {'third': '3', 'first': 'test1'}, 'list': [1, 2], 'str': '1'}

Проблема решается использованием модуля copy.

>>>import copy

>>>f = copy.deepcopy(s)
>>>f['second'] = '3'
>>>f['dict']['third'] = '3'
>>>print s

>>>print f

Как работает copy.deepcopy

Начнем с аргументов

deepcopy(x, memo=None, _nil=[])

x — копируемый объект. Копируемым объектом может быть любой стандартный тип данных, а также кастомных объектов.
memo — словарь, в котором будут сопоставлены id созданных объектов и их значения. По-умолчанию None(если не понятно почему, то смотрим в ссылки [3]). При желании можно реализовать собственный «копир», если есть потребность в специфичном поведении копирования.
_nil — вспомогательный атрибут, используемый во время копирования

Пара примеров для понимания работы deepcopy

>>>s = {«i»: 1, «s»: «2», «l»: [1, 2, 3]}
>>>memo = {}
>>>d = copy.deepcopy(s, memo)

>>>print id(s)
44501728

>>>print id(d)
44502304

>>>print d
{'i': 1, 's': '2', 'l': [1, 2, 3]}

>>>print id(memo)
44502016

>>>print memo

{44501728: {'i': 1, 's': '2', 'l': [1, 2, 3]}, 31711104: '2', 31565540: 2, 44502016: [1, 'i', '2', 's', 2, 3, [1, 2, 3], 'l', {'i': 1, 's': '2', 'l': [1, 2, 3]}], 31266408: 'i', 31565552: 1, 31565528: 3, 31268304: 's', 31708488: 'l', 44497976: [1, 2, 3]}

Словарь memo хранит id всех копируемых объектов, их значения., а также свой id.

>>>dt = copy.deepcopy(s, memo)

>>>print id(dt)
44502304

print dt
{'i': 1, 's': '2', 'l': [1, 2, 3]}

Как видим, deepcopy возвращает уже копировавшийся объект d

>>>s1 = {«i»: 1, «s»: «2», «l»: [1, 2, 3]}
>>>dth = copy.deepcopy(s1, memo)
>>>print id(s1)
44516240

>>>print(id(dth))
44517248

>>>print(dth)
{'i': 1, 's': '2', 'l': [1, 2, 3]}

>>>print(id(memo))
44502016

>>>print(memo)
{44501728: {'i': 1, s': '2', 'l': [1, 2, 3]}, 31711104: '2', 44516240: {'i': 1,  's': '2', 'l': [1, 2, 3]}, 31565540: 2, 44502016: [1, 'i', '2', 's', 2, 3, [1, 2, 3], 'l', {'i': 1, 's': '2', 'l': [1, 2, 3]}, [1, 2, 3], {'i': 1, 's': '2', 'l': [1, 2, 3]}], 31266408: 'i', 31565552: 1, 31565528: 3, 44498856: [1, 2, 3], 31268304: 's', 31708488: 'l', 44497976: [1, 2, 3]}

Реализация deepcopy

Сначала происходит инициализация memo, если словарь не задан. Если memo задан тогда проверяется наличие id копируемого объекта, если такой объект уже есть в memo, то происходит его возврат.

d = id(x)
y = memo.get(d, _nil)
if y is not _nil:
    return y

Т.е. если после копирования нужно все время получать новый объект, то тогда поле memo нужно оставлять по-умолчанию (это мы видели на примере выше).

Далее определяется тип копируемого объекта и если он есть в описании стандартных типов, то вызывается функция копирования

copier = _deepcopy_dispatch.get(cls)
if copier:
    y = copier(x, memo)

Например, для словаря вызывается _deepcopy_dict

def _deepcopy_dict(x, memo):
    y = {}
    memo[id(x)] = y
    for key, value in x.iteritems():
        y[deepcopy(key, memo)] = deepcopy(value, memo)
    return y

Код довольно простой, создается новый словарь, в цикле копируются значения. Обратите внимание копирование идет — рекурсивным вызовом deepcopy, сделано это на случай того, если словарь составной и содержит вложенные объекты.
После успешного копирования обновляется словарь memo и вызывается функция _keep_alive, которая записывает в memo, сам копируемый объект, т.е. если вызвать memo[id(memo)], то получим список всех объектов, которые копировались.

Ссылки
[1]https://docs.python.org/2/library/stdtypes.html#dict.copy
[2]https://docs.python.org/2/library/copy.html
[3]http://evgenqa.blogspot.ru/2014/05/blog-post_23.html

Автор: Евгений Курочкин

бумажный лотос

Мастер-клаcc «Мощные практики в Новолуние для наполнения энергией, привлечения Любви, Изобилия и Исполнения желаний»

НоволуниеСкоро наступит Новолуние и мы  приглашаем Вас  27 июня в 15-00 МСК и 20-00 МСК

(будет проводиться днем и вечером для вашего удобства)

на практический мастер-класс к Новолунию:

«Мощные практики в Новолуние

для наполнения энергией, привлечения Любви, Изобилия и Исполнения желаний»

Программа и Запись на участие здесь!

Читать

Профилактика ухудшения зрения

Многие люди, почувствовав, что у них начинает портиться зрение, списывают это на возраст и считают, что сами могут выбрать для себя очки или линзы. Между тем, самостоятельный выбор очков или линз может привести к осложнениям и дальнейшему ухудшению зрения. Только врач может определить, в чём причина падения зрения. Он же может назначить методы лечения и профилактики. Дело в том, что глаза, как, впрочем, и другие наши органы, нуждаются в подпитке определёнными витаминами и минералами. Достаточно часто увлечение разнообразными монодиетами негативно сказывается именно на зрении. Для поддержания зрения глазам нужны калий, железо, фосфор, кремний, витамины А, В и Е. Соответственно, включение в рацион продуктов, которые содержат достаточное количество этих витаминов и микроэлементов, в значительной мере поможет сберечь здоровье ваших глаз. Никакие синтетические лекарства не сравнятся с пользой овощей и фруктов, содержащих бета-каротин и кремний: моркови, черники, абрикосов, болгарского перца. Богатейшим источником витамина С в сочетании с кремнием является обычная белокочанная капуста. Проведённые учёными исследования показали, что серьёзные проблемы со зрением могут быть у детей, матери которых во время беременности отказывались от сливочного масла – продукта, чрезвычайно богатого витамином А. Красная рыба, яичные желтки и говяжья печень содержат витамин В12, необходимый для формирования стенок глазных сосудов. Пророщенные злаки, в особенности пшеница и овёс – просто кладезь микроэлементов и витаминов, особенно калия и витамина В. Поэтому нужно стараться чтобы ваше питание было разнообразным и полезным. Очень важна для поддержки зрения и глазная гимнастика. К примеру, известная методика, разработанная профессором В.Г.Ждановым, является прекрасным средством профилактики заболеваний зрения. Современная медицина широко применяет различные корректирующие приспособления: очки и контактные линзы, — позволяющие не только остановить процесс падения, но и улучшить зрение. Современные контактные линзы сконструированы так, что позволяют повышать работоспособность глаза, а также восстанавливать зрительную функцию. Однако отправляться в магазин линз нужно исключительно с рецептом от врача: только врач может подобрать контактные линзы так, чтобы они полностью соответствовали физиологическим особенностям глаз пациента. Таким образом, только комплексный подход к профилактическим и лечебным мероприятием, а также следование рекомендациям врача позволит остановить ухудшение зрения.