Python中a = d['John'] = {}这类字典连续赋值的工作原理解析
Python链式赋值
a = d['John'] = {} 的工作原理 你看到的a = d['John'] = {}是Python里的链式赋值语法,它的执行逻辑和你误以为的嵌套赋值完全不同:
- 先执行最右侧的表达式
{},创建一个空字典对象,这个对象在内存里有唯一的引用地址。 - 从右往左依次完成赋值操作:
- 第一步:把这个空字典对象赋值给
d['John']——也就是给字典d新增(或修改)键'John',让它指向刚才创建的空字典。 - 第二步:把同一个空字典对象赋值给变量
a。
- 第一步:把这个空字典对象赋值给
这就意味着,a和d['John']指向的是同一个内存中的字典对象,所以后续修改a['age'] = 20时,本质是在修改这个共享的字典对象,自然d['John']的内容也会同步变化。
你之前疑惑的a = (d['John'] = {})确实不合法,因为Python里的赋值语句不是表达式,不能嵌套使用,但链式赋值是Python专门支持的语法,它等价于下面的代码:
temp = {} d['John'] = temp a = temp
这里用临时变量temp存储右侧创建的字典对象,再分别赋值给两个目标,和链式赋值的效果完全一致,只是链式赋值写法更简洁。
内容的提问来源于stack exchange,提问作者starriet 차주녕
相关产品推荐
相关产品推荐

