cari
Rumahpembangunan bahagian belakangTutorial PythonMengapakah dua objek berbeza dalam CPython boleh mempunyai ID yang sama walaupun ia bukan objek yang sama?

Why can two distinct objects in CPython have the same ID even though they are not the same object?

Memahami ID Objek Serupa dalam CPython

Dalam CPython, id() fungsi terbina dalam mengembalikan integer unik yang mewakili alamat memori objek . Menariknya, dalam keadaan tertentu, dua objek berbeza boleh mempunyai ID yang sama, seperti yang diperhatikan dalam contoh berikut:

<code class="python">tuple1 = ()
tuple2 = ()
dict1 = {}
dict2 = {}
list1 = []
list2 = []

# Tuples are immutable
assert(id(tuple1) == id(tuple2))

# Dicts are mutable
assert(id(dict1) != id(dict2))

# Lists are mutable too
assert(id(list1) != id(list2))

# Unexpectedly, empty dicts and lists have the same ID
assert(id({}) == id({}))
assert(id([]) == id([]))</code>

Sebab Di Sebalik Tingkah Laku

Pelik ini fenomena berlaku disebabkan oleh tingkah laku masa jalan pengalokasi memori CPython dan cara ia mengendalikan penciptaan dan pemusnahan objek. Apabila id({}) dipanggil, CPython mencipta objek kamus baharu dan menetapkannya ke lokasi sementara dalam ingatan. Walau bagaimanapun, objek sementara ini dimusnahkan serta-merta selepas IDnya dikembalikan oleh fungsi id(). Apabila id({}) seterusnya dipanggil, kamus baharu mungkin berlaku di lokasi memori yang sama seperti yang sebelumnya, menghasilkan ID yang sama walaupun objek ini berbeza.

Alasan ini adalah disokong lagi oleh tingkah laku yang diperhatikan dalam urutan berikut:

<code class="python">id([])
4330909912

x = []
id(x)
4330909912

id([])
4334243440</code>

Kesan Kebolehubahan dan Cache

Perlu diperhatikan bahawa kebolehubahan memainkan peranan tidak langsung dalam tingkah laku ini. Walaupun objek boleh ubah (seperti senarai dan kamus) tidak layak untuk caching objek kod, objek tidak boleh ubah (seperti tupel kosong dan rentetan tertentu). Ini bermakna dalam objek kod yang sama, objek tidak berubah ini akan digunakan semula, yang berpotensi membawa kepada penugasan ID yang sama kepada objek tidak berubah yang berbeza.

Keunikan Id dan Sepanjang Hayat Objek

Ringkasnya, ID objek adalah unik hanya untuk tempoh hayatnya. Sebaik sahaja objek dimusnahkan atau sebelum ia dicipta, objek lain mungkin diberikan ID yang sama. Tingkah laku ini menekankan sifat sementara ID objek dalam CPython dan kepentingan memahami peruntukan memori dan dinamik penciptaan objek dalam konteks pelaksanaan Python yang mendasari.

Atas ialah kandungan terperinci Mengapakah dua objek berbeza dalam CPython boleh mempunyai ID yang sama walaupun ia bukan objek yang sama?. 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
Bagaimana anda memotong senarai python?Bagaimana anda memotong senarai python?May 02, 2025 am 12:14 AM

Slicingapythonlistisdoneusingthesyntaxlist [Mula: berhenti: langkah] .here'showitworks: 1) startistheindexofthefirstelementtoinclude.2) stopistheindexofthefirstelementToexclude.3)

Apakah beberapa operasi biasa yang boleh dilakukan pada array numpy?Apakah beberapa operasi biasa yang boleh dilakukan pada array numpy?May 02, 2025 am 12:09 AM

NumpyallowsforvariousoperationsonArrays: 1) BasicarithmeticLikeaddition, penolakan, pendaraban, danDivision; 2) Pengerjaan AdvancedSuchasmatrixmultiplication; 3) Element-WiseOperationswithoutExplicitLoops;

Bagaimana tatasusunan digunakan dalam analisis data dengan python?Bagaimana tatasusunan digunakan dalam analisis data dengan python?May 02, 2025 am 12:09 AM

Arraysinpython, terutamanya yang ada, adalah, penawaran yang ditawarkan.1) numpyarraysenableFandlingoflargedataSetsandClexPleperationsLikemovingAverages.2)

Bagaimanakah jejak memori senarai dibandingkan dengan jejak memori array di Python?Bagaimanakah jejak memori senarai dibandingkan dengan jejak memori array di Python?May 02, 2025 am 12:08 AM

ListsSandnumpyAraySInpythonHavedifferMememoryFootPrints: listsaremoreflexibleButlessMememory-cekap, pemanmak

Bagaimana anda mengendalikan konfigurasi khusus persekitaran semasa menggunakan skrip python yang boleh dilaksanakan?Bagaimana anda mengendalikan konfigurasi khusus persekitaran semasa menggunakan skrip python yang boleh dilaksanakan?May 02, 2025 am 12:07 AM

ToensurePythonscriptsbehaveCorrectlyCrossdevelopment, pementasan, dan produksi, usetheseStregies: 1) Environmentvariablesforsimplesettings, 2) ConfigurationFilesfilePlexSetups, dan3) Dynamicloadingforadaptability.EachMethodeFerPiReFiteReFiteShitsandReFitSandRiteFitSandRiteFitSandRiteFiteSandRiteReFitSandRiteReFitSandRiteFiteShiteSandReFiteShitsandReShitsAnfitsEts,

Bagaimana anda memotong array python?Bagaimana anda memotong array python?May 01, 2025 am 12:18 AM

Sintaks asas untuk pengirim senarai python adalah senarai [Mula: Berhenti: Langkah]. 1. Start adalah indeks elemen pertama yang disertakan, 2.Stop adalah indeks elemen pertama yang dikecualikan, dan 3. Step menentukan saiz langkah antara elemen. Hirisan tidak hanya digunakan untuk mengekstrak data, tetapi juga untuk mengubah suai dan membalikkan senarai.

Di bawah keadaan apa yang mungkin senarai lebih baik daripada tatasusunan?Di bawah keadaan apa yang mungkin senarai lebih baik daripada tatasusunan?May 01, 2025 am 12:06 AM

ListsOutPerFormAraySin: 1) DynamicsizingandFrequentInsertions/Deletions, 2) StoringHeterogeneousData, dan3) MemoryeficiencyForSparsedata, ButmayHaveslightPerformancecostSincertaor.

Bagaimana anda boleh menukar array python ke senarai python?Bagaimana anda boleh menukar array python ke senarai python?May 01, 2025 am 12:05 AM

ToConvertapythonarraytoalist, usethelist () constructororageneratorexpression.1) importTheArrayModuleAndCreateeanArray.2) uselist (arr) atau [xforxinarr] toConvertittoalist, urusanPengerasiPormanceAndMemoryeficiencyForlargedatasets.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft