为什么我的字典值会在我没有告诉它的情况下改变,我该如何阻止这种情况发生?

7 浏览
0 Comments

为什么我的字典值会在我没有告诉它的情况下改变,我该如何阻止这种情况发生?

这是我的示例代码:

dict1 = {'a': 5, 'b': 6, 'c': 7}
dict2 = dict1
for i in dict1:
    dict1[i] += 5
print dict1
print dict2

输出结果如下:

{'a': 10, 'c': 12, 'b': 11}
{'a': 10, 'c': 12, 'b': 11}

为什么dict2会在我没有告诉它的情况下发生改变?

Python 2.7.10在GCC 4.8.2 Linux上运行。

也尝试了在GCC 5.4.0上运行的2.7.12,结果相同。

0
0 Comments

当你写dict2 = dict1时,你并没有创建dict1的副本,你只是将dict2设置为指向dict1字典的指针。所以如果你改变了dict1dict2也会改变,因为它指向同一块内存中的字典。如果你想要将dict1复制到dict2,你应该使用Python标准库中的copy模块的deepcopy函数。

以下是使用deepcopy解决这个问题的示例代码:

import copy
dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = copy.deepcopy(dict1)
dict1['a'] = 10
print(dict1)  # 输出: {'a': 10, 'b': 2, 'c': 3}
print(dict2)  # 输出: {'a': 1, 'b': 2, 'c': 3}

在这个示例中,我们使用deepcopy函数将dict1复制到dict2,这样即使我们改变dict1dict2仍然保持不变。

0