我知道python会通过指向内存中两个等价对象的相同对象来节省某些不可变类型。例如,将变量声明为相同的数字(在-5和256的范围内):
i = 5
j = 5
i is j
>> True...and集:
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...How来下面的元组并不指向同一个对象,因为据我所知,它们在所有条件下都是不可变的?
tuple5 = ((),())
tuple6 = ((),())
tuple5 == tuple6
>> True
tuple5 is tuple6
>> False发布于 2017-06-28 05:07:56
在Python引擎看来,当对象足够简单,可以保证进入简单常量的运行时表时,指针就会折叠起来。此表通常包括小整数(如-256到255)、内置类型的空/空对象以及类似的琐碎内容。
更复杂的对象--正如那些设计Python实现的人所定义的那样--在每次引用时都会被重新构建。因此,您可能会发现
a = 1
b = 1引用相同的对象,但是
a = 123456798
b = 123456798有单独的分配。
https://stackoverflow.com/questions/44789684
复制相似问题