首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相同的不可变元组指向不同的对象

相同的不可变元组指向不同的对象
EN

Stack Overflow用户
提问于 2017-06-28 04:54:48
回答 1查看 43关注 0票数 0

我知道python会通过指向内存中两个等价对象的相同对象来节省某些不可变类型。例如,将变量声明为相同的数字(在-5和256的范围内):

代码语言:javascript
复制
i = 5
j = 5
i is j
>> True

...and集:

代码语言:javascript
复制
tuple1 = ()
tuple2 = ()
tuple1 == tuple2
>> True
tuple1 is tuple2
>> True

因为集合(不可变类型)可以包含可变类型,比如可以修改的列表,所以我理解Python不希望指向与本例中相同的对象:

代码语言:javascript
复制
tuple3 = ([1, 2, 3], a, b)
tuple4 = ([1, 2, 3], a, b)
tuple3 is tuple4
>> False

...How来下面的元组并不指向同一个对象,因为据我所知,它们在所有条件下都是不可变的?

代码语言:javascript
复制
tuple5 = ((),())
tuple6 = ((),())
tuple5 == tuple6
>> True
tuple5 is tuple6
>> False
EN

回答 1

Stack Overflow用户

发布于 2017-06-28 05:07:56

在Python引擎看来,当对象足够简单,可以保证进入简单常量的运行时表时,指针就会折叠起来。此表通常包括小整数(如-256到255)、内置类型的空/空对象以及类似的琐碎内容。

更复杂的对象--正如那些设计Python实现的人所定义的那样--在每次引用时都会被重新构建。因此,您可能会发现

代码语言:javascript
复制
a = 1
b = 1

引用相同的对象,但是

代码语言:javascript
复制
a = 123456798
b = 123456798

有单独的分配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44789684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档