Saya membaca dokumen Python 2 dan memperhatikan id()
fungsinya:
Kembalikan "identitas" dari suatu objek. Ini adalah bilangan bulat (atau bilangan bulat panjang) yang dijamin unik dan konstan untuk objek ini selama masa pakainya. Dua objek dengan masa pakai yang tidak tumpang tindih mungkin memiliki nilai id () yang sama.
Detail implementasi CPython: Ini adalah alamat objek di memori.
Jadi, saya bereksperimen dengan menggunakan id()
daftar:
>>> list = [1,2,3]
>>> id(list[0])
31186196
>>> id(list[1])
31907092 // increased by 896
>>> id(list[2])
31907080 // decreased by 12
Apa bilangan bulat yang dikembalikan dari fungsi? Apakah ini identik dengan alamat memori di C? Jika ya, mengapa integer tidak sesuai dengan ukuran tipe data?
Kapan id()
digunakan dalam praktik?
Jawaban:
Posting Anda menanyakan beberapa pertanyaan:
Ini adalah " integer (atau integer panjang) yang dijamin unik dan konstan untuk objek ini selama masa pakainya. " (Python Standard Library - Built-in Functions) Sebuah nomor unik. Tidak lebih dan tidak kurang. Anggap saja sebagai nomor jaminan sosial atau nomor id karyawan untuk objek Python.
Secara konseptual, ya, karena keduanya dijamin unik di alam semesta mereka selama hidup mereka. Dan dalam satu implementasi Python, sebenarnya itu adalah alamat memori dari objek C.
Karena list bukan array, dan elemen list adalah referensi, bukan objek.
Hampir tidak pernah.
id()
(atau yang setara) digunakan diis
operator.sumber
Itulah identitas lokasi objek di memori ...
Contoh ini mungkin dapat membantu Anda memahami konsepnya lebih dalam.
Ini semua menunjuk ke lokasi yang sama di memori, itulah sebabnya nilainya sama. Dalam contoh,
1
hanya disimpan sekali, dan hal lain yang menunjuk1
akan merujuk ke lokasi memori tersebut.sumber
id()
mengembalikan alamat objek yang direferensikan (dalam CPython), tetapi kebingungan Anda berasal dari fakta bahwa daftar python sangat berbeda dari array C. Dalam daftar python, setiap elemen adalah referensi . Jadi apa yang Anda lakukan jauh lebih mirip dengan kode C ini:Dengan kata lain, Anda mencetak alamat dari referensi dan bukan alamat relatif ke tempat daftar Anda disimpan.
Dalam kasus saya, saya telah menemukan
id()
fungsi yang berguna untuk membuat gagang buram untuk kembali ke kode C saat memanggilpython
dari C. Dengan melakukan itu, Anda dapat dengan mudah menggunakan kamus untuk mencari objek dari pegangannya dan dijamin unik.sumber
Jawaban Rob (paling banyak dipilih di atas) benar. Saya ingin menambahkan bahwa dalam beberapa situasi menggunakan ID berguna karena memungkinkan untuk perbandingan objek dan menemukan objek mana yang merujuk ke objek Anda.
Nanti biasanya membantu Anda misalnya untuk men-debug bug aneh di mana objek yang bisa berubah diteruskan sebagai parameter untuk mengatakan kelas dan ditugaskan ke vars lokal di kelas. Mutasi objek tersebut akan mengubah vars di kelas. Ini memanifestasikan dirinya dalam perilaku aneh di mana banyak hal berubah pada saat bersamaan.
Baru-baru ini saya mengalami masalah ini dengan aplikasi Python / Tkinter di mana pengeditan teks dalam satu bidang entri teks mengubah teks di bidang lain saat saya mengetik :)
Berikut adalah contoh bagaimana Anda dapat menggunakan function id () untuk melacak di mana referensi tersebut berada. Dengan segala cara ini bukanlah solusi yang mencakup semua kasus yang mungkin, tetapi Anda mengerti. Sekali lagi ID digunakan di latar belakang dan pengguna tidak melihatnya:
KELUARAN:
Garis bawah pada nama variabel digunakan untuk mencegah perselisihan nama. Fungsi menggunakan argumen "dari mana" sehingga Anda dapat memberi tahu mereka di mana harus mulai mencari referensi. Argumen ini diisi oleh fungsi yang mencantumkan semua nama dalam namespace tertentu. Globals () adalah salah satu fungsinya.
sumber
Saya memulai dengan python dan saya menggunakan id ketika saya menggunakan shell interaktif untuk melihat apakah variabel saya ditugaskan ke hal yang sama atau apakah mereka terlihat sama.
Setiap nilai adalah sebuah id, yang merupakan nomor unik yang terkait dengan tempatnya disimpan di memori komputer.
sumber
Jika Anda menggunakan python 3.4.1 maka Anda mendapatkan jawaban yang berbeda untuk pertanyaan Anda.
kembali:
Bilangan bulat
-5
untuk256
memiliki id konstan, dan jika menemukannya berkali-kali, id-nya tidak berubah, tidak seperti semua angka lain sebelum atau sesudahnya yang memiliki id berbeda setiap kali Anda menemukannya. Angka dari-5
agar256
memiliki id dalam urutan yang meningkat dan berbeda menurut16
.Nomor yang dikembalikan oleh
id()
fungsi adalah id unik yang diberikan untuk setiap item yang disimpan dalam memori dan secara analogi sama dengan lokasi memori di C.sumber
Jawabannya tidak pernah. ID terutama digunakan secara internal untuk Python.
Rata-rata programmer Python mungkin tidak perlu menggunakan
id()
kode mereka.sumber
id()
cukup banyak. Dua kasus penggunaan di luar kepala saya: A (hand-rolled, ad-hoc) identity dict dan customrepr()
untuk objek yang identitasnya penting, tetapi defaultnyarepr
tidak sesuai.The
is
Operator menggunakannya untuk memeriksa apakah dua benda yang identik (sebagai lawan yang sama). Nilai sebenarnya yang dikembalikan dariid()
hampir tidak pernah digunakan untuk apa pun karena tidak benar-benar memiliki arti, dan bergantung pada platform.sumber
Ini adalah alamat objek di memori, persis seperti yang dikatakan dokter. Namun, itu memiliki metadata yang menyertainya, properti objek dan lokasi dalam memori diperlukan untuk menyimpan metadata. Jadi, saat Anda membuat variabel yang disebut list, Anda juga membuat metadata untuk daftar dan elemennya.
Jadi, kecuali Anda seorang guru absolut dalam bahasa tersebut, Anda tidak dapat menentukan id elemen berikutnya dari daftar Anda berdasarkan elemen sebelumnya, karena Anda tidak tahu apa yang dialokasikan bahasa bersama dengan elemennya.
sumber
id()
. Anda harus sangat akrab dengan pengelola memori (jamak!) Yang bersangkutan, mengetahui status pastinya di beberapa titik waktu, dan mengetahui urutan persisnya di mana objek telah dialokasikan. Dengan kata lain: Tidak akan terjadi.Saya punya ide untuk menggunakan nilai
id()
dalam logging.Ini murah untuk didapat dan itu cukup pendek.
Dalam kasus saya, saya menggunakan tornado dan
id()
ingin memiliki jangkar ke pesan grup yang tersebar dan dicampur melalui file dengan soket web.sumber
Pada python 3 id ditugaskan ke nilai bukan variabel. Artinya, jika Anda membuat dua fungsi seperti di bawah ini, ketiga id tersebut sama.
sumber
Saya agak terlambat dan saya akan berbicara tentang Python3. Untuk memahami apa itu id () dan bagaimana itu (dan Python) bekerja, pertimbangkan contoh berikut:
Anda perlu memikirkan semua yang ada di sisi kanan sebagai objek. Setiap kali Anda membuat tugas - Anda membuat objek baru dan itu berarti id baru. Di tengah Anda bisa melihat objek "liar" yang dibuat hanya untuk fungsi - id (1000). Jadi, seumur hidup itu hanya untuk baris kode itu. Jika Anda memeriksa baris berikutnya - Anda melihat bahwa ketika kita membuat variabel baru x, itu memiliki id yang sama dengan objek liar itu. Cukup banyak berfungsi seperti alamat memori.
sumber
Hati-hati (tentang jawaban di bawah) ... Itu hanya benar karena 123 berada di antara -5 dan 256 ...
sumber