Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa ID Rentetan Abadi Nampak Berubah dalam Python 2.7?

Mengapa ID Rentetan Abadi Nampak Berubah dalam Python 2.7?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-23 16:22:18313semak imbas

Why Do Immutable String IDs Appear to Change in Python 2.7?

Mengapa ID Rentetan Tidak Boleh Berubah Berubah?

Dalam Python 2.7, gelagat ID rentetan boleh membingungkan. Walaupun rentetan tidak boleh diubah, ID mereka nampaknya berubah dari semasa ke semasa. Artikel ini meneroka sebab di sebalik tingkah laku ini.

Id Interning dalam Python

CPython tidak melatih semua rentetan secara lalai. Walau bagaimanapun, rentetan yang memenuhi kriteria tertentu boleh dimasukkan menggunakan fungsi sys.intern() atau panggilan intern_string_constants() fungsi PyCode_New. Internment memastikan bahawa berbilang kejadian rentetan yang sama dalam pangkalan kod menggunakan objek yang sama.

String yang layak untuk latihan termasuk:

  • Malar yang disimpan dalam objek kod
  • Rentetan yang mengandungi hanya huruf ASCII, digit atau garis bawah
  • Rentetan yang diberikan kepada pengecam dan nilainya (cth., so = 'so')

Menukar ID

Jika rentetan tidak layak untuk latihan, IDnya akan terus berubah. Ini kerana Python bebas untuk menggunakan semula lokasi memori untuk rentetan baharu, membawa kepada ID berbeza untuk literal yang sama.

Penggunaan Interning dan Rentetan

Gelagat ID bergantung tentang cara rentetan digunakan:

  • Tanpa Rujukan Pembolehubah: Jika anda panggil id('so') berbilang kali tanpa memberikannya kepada pembolehubah, ID mungkin berubah kerana objek rentetan yang diinternalkan dibuang.
  • Dengan Rujukan Pembolehubah: Jika anda menetapkan rentetan kepada pembolehubah (cth., so = 'so'), ID akan kekal sama kerana rentetan yang diinternet terikat pada pembolehubah.

Concatenating Strings

Concatenating Strings juga mempengaruhi ID. Rentetan yang digabungkan dalam had pengoptimum boleh membawa kepada rentetan yang diinternet, menghasilkan ID yang sama untuk rentetan yang digabungkan.

Kesimpulan

ID rentetan tidak boleh ubah dalam Python 2.7 ialah tidak selalu sama disebabkan oleh mekanisme interning dan penggunaan semula ingatan. Memahami faktor ini membantu menjelaskan ketidakkonsistenan yang jelas dalam ID rentetan.

Atas ialah kandungan terperinci Mengapa ID Rentetan Abadi Nampak Berubah dalam Python 2.7?. 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