Какова цель второго параметра Deepcopy, памятки?

IE отображает предупреждение active x и запрашивает разрешение, если вы разрешаете ему запускать или нет. Чтобы преодолеть это, единственным решением является:

  1. Открыть Internet Explorer.
  2. Выберите меню «Сервис», а затем нажмите «Свойства обозревателя».
  3. На вкладке «Безопасность» нажмите кнопку «Пользовательский уровень».
  4. Прокрутите список настроек безопасности до тех пор, пока вы не увидите ActiveX элементы управления и плагины.
  5. Для автоматического запроса элементов управления ActiveX нажмите «Включить».
  6. Прокрутите вниз до пункта «Загрузить подписанные элементы управления ActiveX» и нажмите «Включить или запросить».
  7. Прокрутите вниз до пункта «Выполнить» ActiveX и нажмите «Включить» или «Подсказка».
  8. Прокрутите вниз до значков ActiveX, отмеченных как безопасные для сценариев, и нажмите «Включить» или «Подсказка».
  9. Нажмите «ОК», а затем нажмите OK еще раз.

Невозможно преодолеть эту проблему, кроме изменения параметров вручную Internet Explorer. Попробуйте проверить, нормально ли работает плагин при изменении настроек. Если его все еще не работает или не отображается какое-либо предупреждение, попробуйте проверить консоль на наличие других ошибок, которые не связаны с active x. Удачи!

15
задан IAbstract 4 December 2014 в 18:00
поделиться

2 ответа

Это диктат memo , где сохраняется соответствие id-объектам, чтобы идеально реконструировать сложные графики объектов. Сложно "использовать код", но попробуем:

>>> import copy
>>> memo = {}
>>> x = range(5)
>>> y = copy.deepcopy(x, memo)
>>> memo
{399680: [0, 1, 2, 3, 4], 16790896: 3, 16790884: 4, 16790920: 1,
 438608: [0, 1, 2, 3, 4, [0, 1, 2, 3, 4]], 16790932: 0, 16790908: 2}
>>> 

и

>>> id(x)
399680
>>> for j in x: print j, id(j)
... 
0 16790932
1 16790920
2 16790908
3 16790896
4 16790884

так, чтобы идентификаторы были абсолютно верны. Также:

>>> for k, v in memo.items(): print k, id(v)
... 
399680 435264
16790896 16790896
16790884 16790884
16790920 16790920
438608 435464
16790932 16790932
16790908 16790908

вы видите идентификатор (неизменяемых) целых чисел.

Так что вот граф:

>>> z = [x, x]
>>> t = copy.deepcopy(z, memo)
>>> print id(t[0]), id(t[1]), id(y)
435264 435264 435264

так что вы видите, что все подкопии - это те же самые объекты, что и y (с тех пор как мы повторно использовали памятку).

.
9
ответ дан 30 November 2019 в 22:17
поделиться

Вы можете прочитать больше, посмотрев онлайн-документацию на Python:

http://docs.python.org/library/copy.html

Функция deepcopy() является рекурсивной, и она будет работать вниз через глубоко вложенный объект. Она использует словарь для обнаружения увиденных ранее объектов, для обнаружения бесконечного цикла. Просто игнорируйте этот словарь.

class A(object):
    def __init__(self, *args):
        self.lst = args

class B(object):
    def __init__(self):
        self.x = self

def my_deepcopy(arg):
    try:
        obj = type(arg)()  # get new, empty instance of type arg
        for key in arg.__dict__:
            obj.__dict__[key] = my_deepcopy(arg.__dict__[key])
        return obj
    except AttributeError:
        return type(arg)(arg)  # return new instance of a simple type such as str

a = A(1, 2, 3)
b = B()
b.x is b  # evaluates to True
c = my_deepcopy(a)  # works fine
c = my_deepcopy(b)  # stack overflow, recurses forever

from copy import deepcopy
c = deepcopy(b)  # this works because of the second, hidden, dict argument

Просто игнорируйте второй, скрытый, аргумент dict. Не пытайтесь его использовать.

5
ответ дан 30 November 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: