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

为何两组Python代码的集合值相同但对象id却不同?

为什么两段Python集合代码的id输出不同?

第一段代码分析

这段代码里的赋值操作只是给同一个集合对象多起了一个“外号”:

one_set = set()
one_set.add("a")
two_set = one_set

print(id(one_set))
print(id(two_set))

当执行two_set = one_set时,并没有创建新集合——two_set和one_set都是指向内存中同一个集合对象的引用。所以它们的id(内存地址)完全相同,本质上就是同一个东西的两个名字。

第二段代码分析

这段代码用copy()方法生成了一个全新的独立集合:

oneset = set()
oneset.add("a")
twoset = oneset.copy()

print(id(oneset))
print(id(twoset))

oneset.copy()会在内存里开辟新空间,把原集合的内容完整复制进去,生成一个和原集合内容一致但完全独立的新对象。twoset指向的就是这个新集合,它和原集合oneset只是内容相同,但在内存里是两个不同的个体,所以它们的id自然不一样。

核心区别

  • 直接赋值(var2 = var1):两个变量共享同一个对象,id相同,修改其中一个会同步影响另一个
  • 调用copy():生成内容一致的新对象,id不同,两个对象的修改互不干扰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:57:43