Dalam python, apakah ada perbedaan antara memanggil clear()
dan menugaskan {}
ke kamus? Jika ya, apa itu? Contoh:
d = {"stuff":"things"}
d.clear() #this way
d = {} #vs this way
python
dictionary
Marcin
sumber
sumber
Jawaban:
Jika Anda memiliki variabel lain yang juga merujuk ke kamus yang sama, ada perbedaan besar:
Ini karena penugasan
d = {}
membuat kamus baru yang kosong dan menugaskannya ked
variabel. Ini meninggalkand2
menunjuk ke kamus lama dengan item masih di dalamnya. Namun,d.clear()
membersihkan kamus yang sama yangd
dand2
kedua titik di.sumber
d = {}
akan membuat contoh baru untukd
tetapi semua referensi lain masih akan menunjuk ke konten lama.d.clear()
akan mengatur ulang konten, tetapi semua referensi ke instance yang sama akan tetap benar.sumber
Selain perbedaan yang disebutkan dalam jawaban lain, ada juga perbedaan kecepatan. d = {} selesai dua kali lebih cepat:
sumber
d = {}
harus lebih cepat karena pembersihan keseluruhan dapat diserahkan kepada Pengumpul Sampah untuk nanti.Sebagai ilustrasi untuk hal-hal yang telah disebutkan sebelumnya:
sumber
.clear
memodifikasi objek tetapi `= {}` membuat objek baru.Selain jawaban @odano, sepertinya menggunakan
d.clear()
lebih cepat jika Anda ingin menghapus dikt berkali-kali.Hasilnya adalah:
sumber
Metode bermutasi selalu berguna jika objek asli tidak dalam cakupan:
Menetapkan kembali kamus akan membuat objek baru dan tidak akan memodifikasi yang asli.
sumber
Satu hal yang tidak disebutkan adalah masalah pelingkupan. Bukan contoh yang bagus, tapi inilah kasus di mana saya mengalami masalah:
Solusinya adalah dengan mengganti
c_kwargs = {}
denganc_kwargs.clear()
Jika seseorang memikirkan contoh yang lebih praktis, silakan mengedit posting ini.
sumber
global c_kwargs
mungkin juga tidak akan bekerja? Meskipun mungkinglobal
bukan hal terbaik untuk menggunakan banyak.global
akan membuat fungsi berperilaku berbeda - semua panggilan ke conf_decorator kemudian akan berbagi variabel c_kwargs yang sama. Saya percaya Python 3 menambahkannonlocal
kata kunci untuk mengatasi masalah ini, dan itu akan berhasil.Selain itu, terkadang instance dikt mungkin menjadi subkelas dikt (
defaultdict
misalnya). Dalam hal ini, penggunaanclear
lebih disukai, karena kita tidak harus mengingat jenis persis dari dikt tersebut, dan juga menghindari kode duplikat (menyambungkan garis kliring dengan garis inisialisasi).sumber