2016-12-04 3 views
0

Я использую словарь как аргумент функции.python Dictionary Mutable Clarification

Когда я меняю значения переданного аргумента, он получает измененный родительский словарь. Я использовал dict.copy(), но все еще не эффективен.

Как избежать изменения в словарных значениях. Необходимы ваши входы

>>> myDict = {'one': ['1', '2', '3']} 
>>> def dictionary(dict1): 
    dict2 = dict1.copy() 
    dict2['one'][0] = 'one' 
    print dict2 


>>> dictionary(myDict) 
{'one': ['one', '2', '3']} 
>>> myDict 
{'one': ['one', '2', '3']} 

Мое намерение - это мой родительский словарь, который необходимо изменить. Спасибо, Vignesh

+0

http://stackoverflow.com/questions/2465921/how-to-copy-a-dictionary-and-only-edit-the-copy – Jakub

+0

«Мое намерение заключалось в том, что мой родительский словарь должен быть изменен». Это то, что происходит. Вы имели в виду, что ваше намерение состоит в том, что оно должно быть не изменено? – BrenBarn

ответ

1

Используйте deepcopy() с модуля copy.

from copy import deepcopy 
myDict = {'one': ['1', '2', '3']} 
def dictionary(dict1): 
    dict2 = deepcopy(dict1) 
    dict2['one'][0] = 'one' 
    print dict2 

the docs См:

A shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original. 
A deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original. 
0

Вы можете использовать deepcopy из copy модуля как в этом примере:

from copy import deepcopy 

myDict = {'one': ['1', '2', '3']} 

def dictionary(dict1): 
    dict2 = deepcopy(dict1) 
    dict2['one'][0] = 'one' 
    print dict2 

dictionary(myDict) 
print(myDict) 

Выход:

dict2 {'one': ['one', '2', '3']} 
myDict {'one': ['1', '2', '3']}