2014-03-21 3 views
-1

Я бегу этот код: https://dpaste.de/RiAPПеременные, определенные в функции - Python

Как вы видите, переменная linespecificpayload используется только внутри этой функции, но если я проверить удостоверение личности, его же в каждом вызове функции.

Я не могу понять, как очистить его значение при каждом вызове. Оба вызова для id(linespecificpayload) возвращают одинаковое значение. Любые предложения приветствуются.

Также код - это то, что я написал через час или два. Так что, возможно, не самый эффективный.

+0

Почему вы хотите, чтобы очистить его? –

+0

'linespecificpayload' объявляется и назначается глобальной переменной' filespecificpayload' ... поэтому вызов 'id (linespecificpayload)' приведет к тому же значению. – DOOM

+0

В каждом вызове функции структура JSON линии specificificpayload модифицируется и передается веб-API. Для каждого звонка я хотел бы начать с новой копии. – gattaga

ответ

0

Причина в том, что вы назначаете глобальный объект linespecificpayload, поэтому эта ссылка остается прежней.

Если вы хотите создать копию filespecificpayload Сыроватского вы можете:

  • использование filespecificpayload.copy(). Это создаст копию Dict, но ценности, которые существовали до копирования будут разделены так, что id(filespecificpayload[key]) == id(filespecificpayload.copy()[key])

  • использование copy.deepcopy():

    >>> from copy import deepcopy 
    >>> d = deepcopy(filespecificpayload) 
    >>> id(d[key]) == id(filespecificpayload[key]) 
    False 
    
+0

Как сделать так, чтобы linepecificpayload копировал значение, а не ссылку filespecificpayload – gattaga

+0

Если 'filespecificpayload' является регулярным dict, вы можете использовать' filespecificpayload.copy() 'для создания другого dict с теми же объектами, что и значения, или 'из копий import deepcopy; deepcopy (filespecificpayload) 'для выполнения полномасштабной копии. –

+0

Thank. Использование Deepcopy исправляет это. Время больше узнать о нем – gattaga

Смежные вопросы