Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Operator Python 'adalah' Berkelakuan Tanpa Jangka dengan Integer Tertentu?

Mengapa Operator Python 'adalah' Berkelakuan Tanpa Jangka dengan Integer Tertentu?

Barbara Streisand
Lepaskan: 2024-12-27 16:37:11
asal
996 orang telah melayarinya

Why Does Python's

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
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan