Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Python Cache Beberapa Integer Tetapi Bukan Yang Lain?

Mengapa Python Cache Beberapa Integer Tetapi Bukan Yang Lain?

Patricia Arquette
Patricia Arquetteasal
2024-12-25 17:22:09608semak imbas

Why Does Python Cache Some Integers But Not Others?

Ada apa dengan Cache Integer yang Dikekalkan oleh Jurubahasa?

Python mengoptimumkan literal yang sama apabila menyusunnya ke dalam objek kod yang sama, menghasilkan objek mempunyai identiti yang sama. Biasanya, integer dalam julat [-5, 256] dicache, tetapi ini tidak menjamin bahawa semua integer dalam julat ini akan mempunyai identiti yang sama.

Dalam kod contoh yang anda berikan, apabila anda melaksanakan setiap baris secara berasingan dalam cangkerang Python:

>>> a = 1
>>> b = 1
>>> a is b
True

kod dihuraikan dan disusun secara berasingan untuk setiap baris. Walau bagaimanapun, apabila anda menjalankan kod yang sama bersama-sama dalam fail:

>>> a = 257; b = 257; a is b
True

pengkompil boleh mengoptimumkan literal. Semasa proses penyusunan, AST diubah menjadi kod bait, dan pengkompil menganalisis penggunaan literal untuk mengelakkan penduaannya. Ini menghasilkan pemalar tunggal untuk integer 257 dalam kod yang disusun.

Pengoptimuman ini tidak terhad kepada integer tetapi juga digunakan pada literal lain seperti apungan. Walau bagaimanapun, ia tidak berfungsi untuk literal yang lebih kompleks seperti tupel, di mana literal dalam tupel dioptimumkan secara berasingan.

Sebab mengapa anda melihat dua PyInt_Objects dicipta mungkin disebabkan pendekatan penghurai untuk menukar literal kepada integer . Penghurai menggunakan fungsi yang menukar literal kepada nilai integer dan kemudian memanggil PyLong_FromString untuk mencipta objek integer. Pendekatan ini mengelak daripada menulis semula kod penukaran dan membolehkan sambungan mudah.

Walau bagaimanapun, pengoptimuman akhir untuk memastikan pemalar yang sama menggunakan objek yang sama berlaku semasa penyusunan bytecode, bukan semasa transformasi AST. Khususnya, fungsi compiler_add_o bertanggungjawab untuk menyimpan pemalar dalam objek kamus, menyebabkan pemalar yang sama jatuh ke dalam slot yang sama dan diwakili oleh pemalar tunggal dalam kod bait akhir.

Atas ialah kandungan terperinci Mengapa Python Cache Beberapa Integer Tetapi Bukan Yang Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn