Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不确定字典为什么会变异_Python_Dictionary_Mutated - Fatal编程技术网

Python 不确定字典为什么会变异

Python 不确定字典为什么会变异,python,dictionary,mutated,Python,Dictionary,Mutated,通过麻省理工学院的开放式课件自学Python,并在下面的代码中遇到了问题。当我单独或在另一个函数中运行此函数时,它会改变最初传递的值“hand”,我不知道为什么。我将两个局部变量(hand0和tester)设置为hand,第一个用于保留初始值,第二个用于迭代。然而,这三种情况都会发生变化,而我只希望“测试员”会这样做。除了变异“手”外,该函数按预期工作 (传递给函数的值在设置的参数中有所不同:word_list是有效英语单词的列表,word是我在此函数中替换以进行测试的字符串,hand是字母及其

通过麻省理工学院的开放式课件自学Python,并在下面的代码中遇到了问题。当我单独或在另一个函数中运行此函数时,它会改变最初传递的值“hand”,我不知道为什么。我将两个局部变量(hand0和tester)设置为hand,第一个用于保留初始值,第二个用于迭代。然而,这三种情况都会发生变化,而我只希望“测试员”会这样做。除了变异“手”外,该函数按预期工作

(传递给函数的值在设置的参数中有所不同:word_list是有效英语单词的列表,word是我在此函数中替换以进行测试的字符串,hand是字母及其相关计数的字典。调试代码已注释掉。)


当您执行
tester=hand
时,您只创建了对
hand
对象的新引用。换句话说,
tester
hand
是同一个对象。如果您检查了他们的
id
,您可以看到这一点:

print id(tester)
print id(hand)  #should be the same as `id(tester)`
或者与
is
运算符进行比较:

print tester is hand  #should return `True`
要复制词典,可以使用
.copy
方法:

tester = hand.copy()

当您执行
tester=hand
操作时,您不是在复制
hand
,而是在对同一对象进行新的引用。您对
检测仪所做的任何修改都将反映在
手册中


使用
tester=hand.copy()
修复此问题:

伟人所见略同!令人惊讶的是,我们的答案以完全相同的措辞开头。@Markransem——我很高兴能和你的想法一起考虑:-)谢谢你花时间回答我的新手问题。感谢您的帮助。@PhilSaulnier他们通过帮助像you@PhilSaulnier--这实际上是我在python中发现的比较难的概念之一。一旦你弄明白了它,它就很有意义,而且非常有用/强大,但要适应来自其他语言需要一点时间。
tester = hand.copy()