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
Linda Hamiltonasal
2024-12-01 07:18:11826semak imbas

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

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!

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