ID yang sama untuk Pelbagai Objek: Gelagat Unik Python
Dalam Python, mencipta berbilang objek tanpa memberikannya nama boleh menyebabkan mereka berkongsi ID yang sama. Paradoks yang jelas ini berpunca daripada fakta bahawa ID objek hanya unik dalam jangka hayatnya.
Apabila anda mencipta pembolehubah yang merujuk kepada objek, seperti someClass(), hayat objek bermula apabila pembolehubah ditetapkan dan tamat apabila ia di luar skop. Dalam contoh yang anda berikan:
print(someClass()) print(someClass())
Dua panggilan someClass() menghasilkan dua objek, tetapi kedua-duanya dicipta dan dimusnahkan dalam panggilan yang sama untuk mencetak. Oleh itu, mereka berkongsi hayat yang sama dan boleh mempunyai ID yang sama.
Tingkah laku ini diserlahkan lagi dalam penggunaan pengiraan rujukan Python 3.3.3 untuk pengumpulan sampah. Apabila kiraan rujukan objek mencapai sifar (iaitu, tiada pembolehubah merujuk kepadanya), ia menjadi layak untuk dipadamkan. Dalam contoh kami, panggilan kedua kepada someClass() menyebabkan kiraan rujukan objek pertama mencapai sifar, menjadikannya layak untuk deallokasi segera.
Memandangkan objek seterusnya yang akan diperuntukkan diletakkan di lokasi memori yang sama sebagai objek pertama, ia berakhir dengan ID yang sama. Ini menerangkan sebab memanggil kelas yang sama beberapa kali berturut-turut boleh menghasilkan objek dengan ID yang sama.
Jika anda memerlukan ID unik untuk objek, anda boleh mengatasi gelagat ini dengan memberikannya secara eksplisit kepada pembolehubah dan memegangnya :
a = someClass() b = someClass() print(id(a)) print(id(b))
Di sini, a dan b merujuk kepada objek berasingan dengan ID yang berbeza, walaupun ia tergolong dalam kelas yang sama. Sebagai alternatif, anda boleh melaksanakan mekanisme ID khusus kelas anda sendiri untuk memastikan keunikan.
Atas ialah kandungan terperinci Mengapa Beberapa Objek Python Kadang-kadang Berkongsi ID yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!