据我所知,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
答案 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);
有单独的分配。