Rumah > Artikel > pembangunan bahagian belakang > Mengapa tupel kosong, kamus dan senarai berkongsi alamat memori dalam CPython, dan mengapa ini tidak berkaitan dengan kebolehubahan?
Mengapa Tuple Kosong, Kamus dan Senarai Berkongsi Alamat Memori dalam CPython?
Dalam CPython, bekas kosong (tuple, kamus dan senarai) mempamerkan tingkah laku pelik mengenai pengecam objek mereka. Khususnya, tupel kosong, seperti (), dan kamus kosong, seperti {}, mempunyai alamat memori yang sama, dan senarai kosong, seperti [], turut berkongsi alamat yang sama.
Penjelasan
Apabila id({}) atau id([]) dipanggil dalam CPython, bekas sementara dicipta dan dihantar ke fungsi id. Walau bagaimanapun, sebelum fungsi memproses bekas sementara ini, alamat memorinya direkodkan dan diteruskan. Bekas sementara itu kemudiannya dibuang, hanya meninggalkan alamat memorinya.
Seterusnya, apabila panggilan lain ke id({}) atau id([]) dibuat sebelum sebarang bekas lain dibuat, alamat memori yang sama berkemungkinan akan diberikan kepada bekas sementara baharu. Pengalokasi memori CPython sering memperuntukkan blok memori secara berturut-turut, menjadikan senario ini berkemungkinan tinggi.
Memandangkan fungsi 'id' bergantung pada alamat memori untuk pengenalpastian objek, ia mengikuti id({}) == id({}) itu dan id([]) == id([]) berlaku. Tingkah laku ini hanya berlaku semasa kewujudan sementara bekas kosong ini dan tidak menunjukkan bahawa bekas itu berkongsi sebarang sifat yang wujud.
Perbezaan daripada Kebolehubahan
Kebolehubahan bukan secara langsung faktor dalam fenomena ini. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa objek boleh ubah, seperti senarai, tidak boleh dicache atau digunakan semula seperti objek tidak berubah, seperti tupel dan rentetan. Akibatnya, id(x) != id(y) untuk mana-mana dua objek boleh ubah yang berbeza, walaupun ia mengandungi unsur yang sama.
Kepentingan
ID objek hanyalah unik sepanjang hayatnya. Selepas objek dimusnahkan atau sebelum ia dibuat, objek lain boleh memperoleh ID yang sama.
Atas ialah kandungan terperinci Mengapa tupel kosong, kamus dan senarai berkongsi alamat memori dalam CPython, dan mengapa ini tidak berkaitan dengan kebolehubahan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!