Rumah >pembangunan bahagian belakang >Tutorial Python >Adakah Python's Integer Cache Impact Compiled Code's Integer Comparisons?
Walaupun Python mengekalkan cache integer untuk nilai antara -5 dan 256, cache ini tidak menjejaskan perbandingan integer secara langsung dalam kod tersusun.
Dalam kod tersusun, pengkompil menganalisis literal bersama-sama, menggabungkan nilai malar yang sama ke dalam satu objek untuk mengoptimumkan penggunaan memori. Tingkah laku ini digunakan bukan sahaja pada integer tetapi juga terapung.
Pertimbangkan contoh berikut:
# Interactive >>> a = 257 >>> b = 257 >>> a is b False
Dalam penterjemah interaktif, setiap baris dihuraikan dan disusun secara berasingan. Oleh itu, a dan b merujuk kepada PyInt_Objects yang berbeza walaupun nilainya yang setara.
# Compiled $ echo 'a = 257 > b = 257 > print a is b' > test.py $ python test.py True
Apabila menyusun kod daripada fail, pengkompil menganalisis keseluruhan kod dan boleh menggabungkan literal yang sama. Ini bermakna a dan b dalam contoh ini akan menunjuk kepada PyInt_Object yang sama, menghasilkan perbandingan True for the is.
Proses pengoptimuman pengkompil dilakukan oleh fungsi compiler_add_o, yang menggunakan kamus untuk menyimpan pemalar. Pemalar yang sama akan menduduki slot yang sama dalam kamus, membawa kepada satu objek pemalar dalam kod bait yang dihimpun.
Tingkah laku penggabungan pengkompil tidak terpakai pada literal kompleks seperti tupel atau senarai. Walaupun elemen yang terkandung mungkin digabungkan, literal itu sendiri akan kekal sebagai objek yang berbeza.
>>> a = (257, 258) >>> b = (257, 258) >>> a is b False >>> a[0] is b[0] True
Pengkompil Python melakukan pengoptimuman yang ketara untuk mengurangkan penggunaan memori, termasuk menggabungkan pemalar yang sama dalam kod yang disusun. Walaupun cache integer itu sendiri tidak memberi kesan langsung kepada pengoptimuman ini, perbandingan integer yang melibatkan nilai yang sama masih akan berfungsi seperti yang diharapkan, dengan nilai yang sama menghasilkan perbandingan True for is dan ==.
Atas ialah kandungan terperinci Adakah Python's Integer Cache Impact Compiled Code's Integer Comparisons?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!