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

2024-09-27 23:26:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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

i = 5
j = 5
i is j
>> True

…和设置:

tuple1 = ()
tuple2 = ()
tuple1 == tuple2
>> True
tuple1 is tuple2
>> True

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

tuple3 = ([1, 2, 3], a, b)
tuple4 = ([1, 2, 3], a, b)
tuple3 is tuple4
>> False

…为什么下面的元组不是指向同一个对象,因为据我所知,它们在任何情况下都是不变的

tuple5 = ((),())
tuple6 = ((),())
tuple5 == tuple6
>> True
tuple5 is tuple6
>> False

Tags: 对象内存falsetrue类型is情况指向
1条回答
网友
1楼 · 发布于 2024-09-27 23:26:28

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

设计Python实现的人定义的更复杂的对象在每次引用时都会重新生成。因此,你可能会发现

a = 1
b = 1

引用同一对象,但是

a = 123456798
b = 123456798

有单独的分配

相关问题 更多 >

    热门问题