Mengapa tupel kosong, kamus dan senarai berkongsi alamat memori dalam CPython, dan mengapa ini tidak berkaitan dengan kebolehubahan?

Patricia Arquette
Lepaskan: 2024-10-31 09:51:29
asal
588 orang telah melayarinya

Why do empty tuples, dictionaries, and lists share memory addresses in CPython, and why is this not related to mutability?

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan