嵌套字典值更新为何同步到父字典?Python字典引用疑问
Python嵌套字典的引用行为解析
Python里确实没有指针,但变量存储的是对象的引用,这就是你看到现象的核心原因。
两种操作的本质区别
重新赋值变量
当你执行dict1 = {'k2':'v2'}时,你只是把dict1这个变量指向了一个全新的字典对象,原来的{'k1':'v1'}对象并没有被改动。此时dict2里的'dict'键依然指向原来的那个旧字典,所以打印dict2时内容不变。修改对象本身
当你执行dict1['k1']='changed value'时,你并没有改变dict1指向的对象,而是通过dict1的引用,直接修改了它所指向的那个字典对象的内部数据。因为dict2里的'dict'键和dict1指向的是同一个字典对象,所以这个修改会同步反映在dict2中。
通俗理解
可以把变量看作贴在对象上的标签:
- 重新赋值变量 = 把标签从一个对象揭下来,贴到另一个新对象上
- 修改对象内容 = 通过标签找到对应的对象,直接修改对象内部的东西
这样就不难理解为什么两种操作会有完全不同的结果了。
内容的提问来源于stack exchange,提问作者maxtsu
相关产品推荐
相关产品推荐

