为何两组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
相关产品推荐
相关产品推荐

