【问题标题】:Dictionary value is another dictionary [duplicate]字典值是另一个字典[重复]
【发布时间】:2015-06-10 08:45:17
【问题描述】:

考虑一下

dict1={}
dict2={}
dict2["first_d2"]="Yes"
dict1["first_d1"]=dict2
print dict1
print dict2
dict2={}
print dict1      ===>Here's the doubt
print dict2

输出:

{'first_d1': {'first_d2': 'Yes'}}
{'first_d2': 'Yes'}
{'first_d1': {'first_d2': 'Yes'}}   ===>Why is this not resetting?Its referencing to dict2
{}

现在python字典是可变的。所以dict1引用dict2。现在在第一次操作dict2被重置后,为什么dict1的值没有被重置?

根据我的理解,可变对象更改内存中的内容并且不返回新对象。那么为什么这里没有发生这种情况?我错过了什么?

从可变和不可变的角度来看,我很困惑!

【问题讨论】:

标签: python python-2.7 dictionary


【解决方案1】:
dict2 = {}

以上行仅使变量dict2 引用新变量,而不是dict1['first_d1'] 中的项目。

如果您想同时更改两者(清除dict2 字典中的所有条目),请使用dict.clear 方法:

dict2.clear()

除此之外,还可以找到更多信息here.

【讨论】:

  • @vks, dict1['first_d1'] 引用 dict 对象 dict2 引用,而不是 dict2 变量本身。
  • @vks,dict2 = {}不会改变对象dict2的引用,而是新建一个字典,让变量dict2引用新的字典。
  • @vks, 尝试在dict2 = {}语句运行前后打印字典对象id(dict2)的id。
  • @vks,任何不可变/可变对象都可以重新分配。 dict.clear() 方法可以改变字典。
  • @vks,我希望这张截图能帮助传达我的意思。 i.imgur.com/gE6d2w9.png
猜你喜欢
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多