使用.get()方法设置变量会导致变量和字典之间的全局链接?

时间:2017-10-17 23:38:50

标签: python dictionary

我不确定我是否会在这里发疯。我有一个存储在字典中的数字数据,我将运行一个函数来改变这些数据。在我这样做之前,我想暂时存储数据以与下一次迭代进行比较。在此示例中,dictionary是有问题的字典,update_data是一个操作字典中对象'data'的值的函数。

示例:

for i in range(n_iterations):
       old_data           = dictionary.get('data')
       #call function which manipulates data
       dictionary['data'] = update_data(dictionary) 
       diff = max(dictionary['data']-old_data)

当我比较新旧时,它们在每次迭代时都是相同的。 diff总是0,当我直观地比较它们时,似乎当我设置old_data时,我暗示变量old_data和字典值之间存在全局链接。

有人可以澄清上面例子中字典对象和变量之间的联系吗?此外,有人可以建议在操作之前存储对象的变通方法吗?谢谢

1 个答案:

答案 0 :(得分:0)

Answered here

在这个例子中,我打算做的是制作一本独立的字典副本。 python所做的是创建对该字典的新引用。为了保持独立性,如@ShadowRanger的注释和上面的链接,您需要制作字典及其值的显式副本。按照问题中的示例,可以使用

实现
import copy

old_data = copy.deepcopy(dictionary)['data']

现在old_data是一个独立的副本' dictionary['data']中的值。