Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Rentetan Python Tidak Berubah Nampaknya Mempunyai ID yang Berubah?

Mengapa Rentetan Python Tidak Berubah Nampaknya Mempunyai ID yang Berubah?

Linda Hamilton
Lepaskan: 2024-12-01 07:18:11
asal
734 orang telah melayarinya

Why Do Immutable Python Strings Seem to Have Changing IDs?

Memahami Perubahan ID Rentetan Kekal dalam Python

Dalam Python, objek rentetan tidak berubah biasanya mempunyai ID yang berubah disebabkan oleh faktor seperti interning rentetan , penggunaan semula lokasi memori dan pengoptimuman kod. Walaupun kebolehubahan mencadangkan ID malar, tingkah laku berikut telah diperhatikan:

Pemerhatian Asal:

id('so') # Changes on every call
Salin selepas log masuk

Menukar ID:

Tingkah laku ini disebabkan oleh kekurangan rentetan yang dijamin dalam CPython. Python tidak sentiasa melatih rentetan, jadi panggilan berulang ke id('so') mungkin menghasilkan ID yang berbeza.

Penggunaan Semula Lokasi Memori:

Python boleh menggunakan semula lokasi memori untuk objek rentetan baharu, membawa kepada padanan ID sekali-sekala walaupun untuk rentetan yang berbeza. Ini tidak dapat diramalkan dan bergantung pada penggunaan memori.

Pengoptimuman Kod:

Pengoptimum Python boleh melipat ungkapan malar (cth., 'foo' 'bar') pada masa penyusunan, menyimpan rentetan yang terhasil dalam satu lokasi memori. Ini membawa kepada ID yang konsisten untuk ungkapan ini.

Pengecualian:

Rentetan malar yang menggunakan huruf ASCII, digit atau garis bawah dikurung oleh pengkompil Python. Oleh itu, literal berikutnya dengan aksara yang sama akan menggunakan semula objek rentetan yang sama, menghasilkan ID yang konsisten.

Pemerhatian Tambahan:

  • Menetapkan rentetan kepada pembolehubah (cth., so = 'so') membekukan ID kerana Python merujuk objek rentetan yang sama untuk kedua-dua nama pembolehubah dan nilai.
  • Rentetan yang dibuat dengan kaedah luaran mungkin tidak mengikut peraturan interning atau pengoptimuman ini.
  • Rentetan pendek yang digabungkan masih boleh membawa kepada interning jika hasilnya sesuai dalam had pengoptimuman.

Atas ialah kandungan terperinci Mengapa Rentetan Python Tidak Berubah Nampaknya Mempunyai ID yang Berubah?. 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