Rumah > Artikel > pembangunan bahagian belakang > Mengapa Operator Python \"is\" Berkelakuan Berbeza dengan Integer Besar dalam Blok Kod Berbeza?
Dalam Python, operator is menyemak identiti objek dan bukannya kesetaraan. Walau bagaimanapun, dalam senario tertentu, tingkah laku ini boleh berlaku di luar jangkaan, seperti yang ditunjukkan di bawah:
<code class="python">def func(): a = 1000 b = 1000 return a is b a = 1000 b = 1000 print(a is b, func()) # (False, True)</code>
Perbandingan is mengembalikan Benar dalam fungsi, tetapi Salah di luarnya. Walaupun keputusan penilaian berbeza, integer a dan b nampaknya mempunyai nilai yang sama.
Untuk memahami tingkah laku ini, tafsiran penterjemah Python tentang blok kod adalah penting. Menurut manual rujukan Python, setiap arahan yang dilaksanakan secara interaktif membentuk blok kod yang berasingan. Yang berikut dianggap sebagai blok:
Dalam satu blok kod, Python menyimpan cache tertentu objek, seperti integer kecil (dalam julat [-5, 256]). Apabila berbilang pembolehubah merujuk kepada literal integer yang sama, mereka semua akan merujuk kepada objek integer cache yang sama. Walau bagaimanapun, jika literal diisytiharkan dalam blok kod yang berbeza, objek integer berbeza akan dibuat.
Untuk menggambarkan ini, pertimbangkan objek kod bagi setiap kes:
Akibatnya, a ialah b menilai kepada True dalam blok fungsi, dengan semua integer adalah dicache dan False di luar blok, di mana objek berasingan dicipta.
Perhatikan kaveat berikut:
Memahami konsep blok kod dalam Python adalah penting untuk mentafsir tingkah laku yang tidak dijangka yang melibatkan perbandingan identiti. Walaupun is berguna untuk menyemak identiti objek tidak berubah, adalah disyorkan untuk menggunakan operator kesamaan (==) untuk membandingkan nilai, kerana ia tidak bergantung pada caching.
Atas ialah kandungan terperinci Mengapa Operator Python \"is\" Berkelakuan Berbeza dengan Integer Besar dalam Blok Kod Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!