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:
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!