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

时间:2017-06-27 20:54:48

标签: python object immutability

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

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

...并设置:

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

因为sets(不可变类型)可以包含可变类型,例如可以修改的列表,所以我理解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

1 个答案:

答案 0 :(得分:0)

当Python引擎认为对象足够简单以保证在简单常量的运行时表中输入时,指针被折叠。该表通常包括小整数(例如-256到255),内置类型的空/ null对象以及类似的小数。

更复杂的对象 - 由设计Python实现的人定义 - 在每个引用处重建。因此,您可能会发现

a = 123456798
b = 123456798

请参阅相同的对象,但

        TheDocument.ExportAsFixedFormat(
        docName.Replace(".docx", ".pdf"),
        Word.WdExportFormat.wdExportFormatPDF, 
        OptimizeFor: Word.WdExportOptimizeFor.wdExportOptimizeForOnScreen, 
        BitmapMissingFonts: true, DocStructureTags: false);

有单独的分配。