为什么我的字典值会在我没有告诉它的情况下改变,我该如何阻止这种情况发生?
为什么我的字典值会在我没有告诉它的情况下改变,我该如何阻止这种情况发生?
这是我的示例代码:
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,结果相同。
当你写dict2 = dict1
时,你并没有创建dict1
的副本,你只是将dict2
设置为指向dict1
字典的指针。所以如果你改变了dict1
,dict2
也会改变,因为它指向同一块内存中的字典。如果你想要将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
,这样即使我们改变dict1
,dict2
仍然保持不变。