Gelagat Tidak Dijangka Operator "ialah" dengan Integer
Operator "adalah" dalam Python membandingkan identiti objek, menguji jika dua pembolehubah merujuk kepada objek tepat yang sama dalam ingatan. Walau bagaimanapun, ia boleh berkelakuan di luar jangkaan apabila membandingkan integer.
Pertimbangkan contoh berikut dalam Python 2.5.2:
>>> a = 256 >>> b = 256 >>> a is b True # Expected result >>> a = 257 >>> b = 257 >>> a is b False # Unexpected result
Mengapa pengendali "is" mengembalikan Palsu apabila membandingkan integer 257?
Jawapannya terletak pada cara Python secara dalaman mewakili integer kecil. Menurut dokumentasi Python, integer antara -5 dan 256 disimpan dalam tatasusunan yang telah diperuntukkan. Apabila anda mencipta integer dalam julat ini, anda sebenarnya mendapat rujukan kepada elemen tatasusunan yang sepadan.
Ini bermakna bahawa untuk integer antara -5 dan 256, pengendali "is" pada dasarnya membandingkan alamat memori dan bukannya integer nilai. Dalam contoh di atas, a dan b kedua-duanya merujuk kepada elemen yang sama dalam tatasusunan, maka hasil True.
Walau bagaimanapun, untuk integer di luar julat ini, pengendali "is" berkelakuan seperti yang diharapkan. Ia membandingkan nilai integer sebenar, bukan alamat memori.
Jika anda perlu membandingkan dua objek jenis yang tidak diketahui, tidak kira sama ada ia adalah integer atau tidak, anda boleh menggunakan fungsi "id()" untuk mendapatkan alamat ingatan mereka dan bandingkan sebaliknya:
>>> a = 257 >>> b = 257 >>> id(a) == id(b) False
Atas ialah kandungan terperinci Mengapa Operator Python 'adalah' Berkelakuan Tanpa Jangka dengan Integer Tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!