Beberapa teman dan saya sedang mendiskusikan hal-hal yang berkaitan dengan manajemen memori dengan Python ketika kami menemukan perilaku di bawah ini:
In [46]: l = ({} for _ in range(6))
In [47]: [ id(i) for i in l]
Out[47]:
[4371243648, # A
4371245048, # B
4371243648, # A
4371245048, # B
4371243648, # etc.
4371245048]
Apa yang mengejutkan di sini adalah bahwa kita tampaknya tidak memiliki perilaku yang terdefinisi dengan baik: perintah tersebut bukanlah sesuatu yang baru atau referensi yang sama setiap saat.
Selain itu, kami mendapatkan perilaku aneh ini (tidak ada kode yang dijalankan di penerjemah antara dua cuplikan ini).
In [48]: m = ({} for _ in range(6))
In [49]: [ id(i) for i in m]
Out[49]:
[4371154376, # C
4371245048, # B (same B as above!)
4371154376, # C
4371245048, # B
4371154376,
4371245048]
Adakah yang bisa menjelaskan perilaku ini? Menggunakan pemahaman daftar (l = [{} for _ in range(6)]
) menunjukkan alamat yang berbeda untuk setiap dict.
id()
dokumentasi fungsi? Anda melewatkan sesuatu yang penting di sana. - person Martijn Pieters   schedule 10.03.2015id()
menggunakan kembali nomor yang sama. Saya terkejut dengan wajah yang menggunakan kembali nomor yang sama sementara saya menyimpan referensi ke sana (yang merupakan kesalahan saya). - person sitaktif   schedule 10.03.2015{}
objek yang Anda hasilkan; generator memproduksinya, tetapi tidak mereferensikannya setelahnya. - person Martijn Pieters   schedule 10.03.2015