【发布时间】:2018-10-30 22:03:29
【问题描述】:
我不明白这些情况:
content = {'a': {'v': 1}, 'b': {'v': 2}}
d1 = {'k1': {}}
d2 = {'k2': {}}
d1['k1'].update(content)
print(d1)
content['a']['v'] = 3
content['b']['v'] = 4
d2['k2'].update(content)
print(d2)
print(d1)
>>> {'k1': {'a': {'v': 1}, 'b': {'v': 2}}}
>>> {'k2': {'a': {'v': 3}, 'b': {'v': 4}}}
>>> {'k1': {'a': {'v': 3}, 'b': {'v': 4}}}
在上述情况下,在变量 content 更新后,d1 的内容发生了变化。
content = {'a': 1, 'b': 2}
d1 = {'k1': {}}
d2 = {'k2': {}}
d1['k1'].update(content)
print(d1)
content['a'] = 3
content['b'] = 4
d2['k2'].update(content)
print(d2)
print(d1)
>>> {'k1': {'a': 1, 'b': 2}}
>>> {'k2': {'a': 3, 'b': 4}}
>>> {'k1': {'a': 1, 'b': 2}}
但是在这种情况下,即使变量 content 已更改,d1 也不会更改。我不明白为什么……有什么想法吗?
【问题讨论】:
-
我认为所有这些赞成票但没有 cmets/answers 是因为人们也认为这是一种奇怪的行为。 :P
-
@MateenUlhaq 不是,这与
dict是可变对象而int是不可变的事实有关。这使得 python 以不同的方式处理它们。如果内容是list(可变),也会发生类似的事情。 -
第二个例子不是也改变了字典(
content)吗? -
@MateenUlhaq 不,在第一个示例中,键指向
dict,在第二个示例中,它们指向int。令人困惑的是这些字典的嵌套性质,但在后台,所有内容都由一堆一旦调用就会解析的指针组成。 -
@MateenUlhaq 如果我善于解释这一点,我会发布答案:)
标签: python dictionary nested mutability