Mengapakah `dict.fromkeys()` Mencipta Senarai Dikongsi dan Bagaimana Saya Boleh Mengelaknya?

Linda Hamilton
Lepaskan: 2024-11-25 01:54:11
asal
194 orang telah melayarinya

Why Does `dict.fromkeys()` Create Shared Lists, and How Can I Avoid It?

Kaveat Fromkeys: Memahami Tingkah Laku Permulaan Kamus

Dalam Python, kaedah dict.fromkeys() biasanya digunakan untuk mencipta kamus dengan kunci yang ditentukan diberikan kepada senarai kosong. Walau bagaimanapun, salah tafsir terhadap tingkah lakunya telah membawa kepada keputusan yang tidak dijangka.

Mengapa fromkeys() Adalah Rumit

Apabila senarai kosong [] disediakan sebagai hujah kedua untuk menentukan .fromkeys(), semua nilai dalam kamus yang terhasil menghala ke objek senarai sama. Ini bermakna sebarang pengubahsuaian kepada satu nilai mempengaruhi semua nilai.

Penyelesaian Alternatif

Untuk menangani isu ini, penyelesaian berikut disyorkan:

  • Gunakan Pemahaman Kamus:

    Dalam Python 2.7 atau ke atas, pemahaman kamus ialah penyelesaian yang paling ringkas dan boleh dibaca:

    data = {k: [] for k in range(2)}
    Salin selepas log masuk
  • Gunakan Pemahaman Senarai dengan dict():

    Dalam versi Python terdahulu, pemahaman senarai boleh dihantar ke dict() pembina:

    data = dict([(k, []) for k in range(2)])
    Salin selepas log masuk
  • Gunakan Ungkapan Penjana dengan dict():

    Dalam Python 2.4-2.6, ungkapan penjana boleh digunakan dengan dict(), dan kurungan boleh ditinggalkan:

    data = dict((k, []) for k in range(2))
    Salin selepas log masuk

Contoh

Contoh berikut menggambarkan perbezaan antara kelakuan lalai fromkeys() dan penyelesaian yang disyorkan:

# Default behavior of fromkeys()
data = {}
data = data.fromkeys(range(2), [])
data[1].append('hello')
print(data)  # Output: {0: ['hello'], 1: ['hello']}

# Using a dictionary comprehension
data = {k: [] for k in range(2)}
data[1].append('hello')
print(data)  # Output: {0: [], 1: ['hello']}
Salin selepas log masuk

Dengan memahami nuansa fromkeys(), pembangun boleh mencipta kamus dengan berkesan senarai kosong dan mengekalkan pengalamatan kunci individu.

Atas ialah kandungan terperinci Mengapakah `dict.fromkeys()` Mencipta Senarai Dikongsi dan Bagaimana Saya Boleh Mengelaknya?. 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