You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字典引用赋值疑问:两段循环代码为何输出不同?

两段代码输出差异的核心原因

第一段代码的问题

你第一段代码里,set1 = {}只在循环外面执行一次,意味着整个过程中只有一个字典对象。每次循环里的set1[i[j][0]] = i[j][1]都是在修改这个唯一的字典,然后set2[i[0]] = set1只是把这个字典的引用(可以理解为指向它的地址)存到set2的对应键里。最后set2所有键指向的都是同一个字典,所以所有值自然都一样——因为最后一次循环把这个字典改完了,所有引用它的地方都会看到最终的结果。

第二段代码为什么正确

第二段代码把set1 = {}放到了循环内部,这意味着每轮循环都会新建一个全新的字典对象。每轮循环修改的都是当前这个新字典,然后把这个新字典的引用存到set2里。每个键对应的都是独立的字典,所以最终set2里的每个值都是各自对应的内容,符合你的预期。

关于你举的字典赋值例子的解释

你那个例子和第一段代码的操作完全不同:

dictionary1 = {}
dictionary2 = {1:'a', 2:'b'}

dictionary1 = dictionary2  # 让dictionary1指向dictionary2当前的对象
dictionary2 = {1:'f', 2:'g'}  # 给dictionary2重新赋值一个全新的字典对象

注意,dictionary2 = {1:'f', 2:'g'}不是修改原来的字典,而是直接创建了一个新字典,然后让dictionary2指向这个新的。原来的{1:'a',2:'b'}并没有被改动,所以dictionary1依然指向原来的那个对象,两者自然互不影响。

而第一段代码里的操作是修改同一个字典对象的内容(比如给它加键值对、改值),不是重新赋值一个新对象,这才是核心区别。

内容的提问来源于stack exchange,提问作者user17907286

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 04:20:14