第二个dict引用第一个dict并不首先注册更改

时间:2017-11-29 00:27:16

标签: dictionary python-3.5

dictOne = {'a':1, 'b':2}
dictTwo = {'aa':dictOne['a'], 'bb':dictOne['b']}

print(dictTwo['aa']
# returns 1

如果我对dictOne做出改变,如:

dictOne['a'] = 2

print(dictOne['a'])
# returns 2

但引用第一个dict的第二个dict仍返回原始值。

print(dictTwo['aa'])
# returns 1

这里发生了什么?我确信这在某种程度上是对dict的不当使用,但我需要立即解决这个问题。感谢。

2 个答案:

答案 0 :(得分:0)

这一行:

dictTwo = {'aa':dictOne['a'], 'bb':dictOne['b']}

相当于:

dictTwo = {'aa':1, 'bb':2}

由于dictOne['a']dictOne['b']都返回不可变值(整数),因此它们是通过复制传递的,而不是通过引用传递的。见How do I pass a variable by reference?

如果你完成dictTwo = dictOne,更新dictOne也会更新dictTwo,但是它们会有相同的键值。

答案 1 :(得分:0)

您使用下面的代码从dictOne中的键'a'中提取值

dictTwo = {'aa':dictOne['a']}

您可能会在阅读python FAQ on pass by assignment

时发现一些价值

在不了解问题的情况下,很难确切地说出如何解决这个问题。如果您需要在不同的键集之间创建映射,可以选择执行以下操作:

dictTwo = {'aa' : 'a', 'bb' : 'b'}
dictOne[dictTwo['aa']]

虽然您正在寻找的是multi key dict